我能做些什么来解决这个问题并打印出元组中以相同首字母开头的所有名称


boys=("david","andrew","ted","tom","james","nicholas","kyle","michael","mark")
startn=()
uname=raw_input("What is your first name?: ")
begin=uname[0]
for name2 in range(len(boys)):
     if begin== boys[name[0]]:
          startn+=(boys[name2],)
          print startn,"start with",begin
     else:
          print "Sorry there are no names that begin with", begin
您在

访问boys时使用name[0]作为索引。您想使用name2

if begin == boys[name2][0]:
    startn += boys[name2]

或者,您可以只遍历boys数组本身:

for boy_name in boys:
    boy_name[0] == begin:
        startn += boy_name

(我不完全确定你在用startn做什么,因为你没有包含那段代码。

这里有一些你可以改进的地方。让我们看看如何清理它并使其正常工作。

for name2 in range(len(boys)):

您不需要range()len()通话。如果要遍历名称,可以直接使用 for 循环进行迭代。

for name in boys:

现在在你的循环中,你有两个变量。您有输入的名称uname和循环name中的当前名称。您可以通过比较uname[0]name[0]来轻松比较每个字符的第一个字符

作为实现这一目标的pythonic方式,请使用str.startswith()

>>> boys=("david","andrew","ted","tom","james","nicholas","kyle","michael","mark")
>>> boys[1].startswith('a')
True
>>> boys[2].startswith('b')
False

所以你的代码必须是:

boys=("david","andrew","ted","tom","james","nicholas","kyle","michael","mark")
startn=()
uname=raw_input("What is your first name?: ")
for name2 in boys:
     if name2.startswith(uname[0]):
          startn+=(boys[name2],)
          print startn,"start with",begin
     else:
          print "Sorry there are no names that begin with", begin

最新更新