从入门到富豪 发表于 2020-4-8 10:27:12

根据输入的名字打印对应的分数问题

各位大佬,以下代码打印出来永远只有迷途,其他的都无法操作,而且会把else后面的也打印出来,不知道错哪了, 正确的应该怎么写呢,请大神指教!

name = input('请输入待查找的用户名:')
score = [['迷途',85],['黑夜',80],['小布丁',65],['娃娃',95],['怡景',90]]
for i in score:
    if name == i:
      print(name,i)
      break
    else:
      name = input('您输入的名字有误,请重新输入:')

sunrise085 发表于 2020-4-8 10:48:03

你的程序,遍历score的第一个后,若不是你输入的名字,你就从新输入,肯定有问题啊。
应该是遍历完整个列表之后发现没找到,然后重新输入。
应该用for…else…
然后在for循环外再套一层循环,对重新输入的用户名进行遍历
name = input('请输入待查找的用户名:')
score = [['迷途',85],['黑夜',80],['小布丁',65],['娃娃',95],['怡景',90]]
flag=1
while flag:
    for i in score:
      if name == i:
            print(name,i)
            flag=0
            break
    else:
      name = input('您输入的名字有误,请重新输入:')

txxcat 发表于 2020-4-8 11:33:36

还可以用自定义函数来写:
def finduser(name):
    for i in score:
      if name == i:
            print(name,i)
            return True
   
score = [['迷途',85],['黑夜',80],['小布丁',65],['娃娃',95],['怡景',90]]
print('请输入待查找的用户名:',end='')
while True:
    if not finduser(input()):
      print('您输入的名字有误,请重新输入:',end='')

TJBEST 发表于 2020-4-8 11:42:54

本帖最后由 TJBEST 于 2020-4-8 11:44 编辑

我理解,你的意思是这样的。
name = input('请输入待查找的用户名:')
score = [['迷途',85],['黑夜',80],['小布丁',65],['娃娃',95],['怡景',90]]
for i in score:
    if name == i:
      print(name,i)
      break
    else:
      continue
else:
    name = input('您输入的名字有误,请重新输入:')
如果if - else 当if 不满足 就会执行 else的语句,所以你的程序会打印多次'您输入的名字有误,请重新输入:'。
加入continue表示 尚未着找到,但是还有未遍历的内容,所以仅这次啥也不干遍历继续。
如果有问题继续询问,如果觉得好,请采纳。

疾风怪盗 发表于 2020-4-8 11:57:27

第一个name和else后面的name不是同一个,后面的name是局部变量,楼主写的时候是想后面的name改变前面的name吧,需要申明全局变量
页: [1]
查看完整版本: 根据输入的名字打印对应的分数问题