在for循环中添加了else语句,现在即使if是tru,也只打印else部分

2024-05-16 01:09:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次上计算机科学课,所以请原谅我,如果这个答案真的很明显。我写了下面的代码,它工作得很好。我只需要添加一个else语句来解释一个无效的名称输入

以下是之前的内容:

    mynames = ['Naomi', 'James', 'Amos', 'Alex', 'Bobbie', 'Josephus', 'Fred', 'Camina', 'Julie', 'Prax', 'Christien', 'Anderson', 'Havelock', 'Ashford', 'Bull', 'Anna', 'Arjun', 'Souther', 'Carissa', 'Samara']
    myscores = [89, 98, 76, 76, 84, 93, 82, 64, 63, 75, 76, 86, 96, 75, 86, 100, 99, 87, 84, 94]

    name = input("Please enter a name:")
    #search through mynames to find the name
    while name!='q':
        for x in range(20):
            if mynames[x] == name:
                 print(mynames[x], "scored", myscores[x])
        name = input("Please enter a name:")

接下来是:

     mynames = ['Naomi', 'James', 'Amos', 'Alex', 'Bobbie', 'Josephus', 'Fred', 'Camina', 'Julie', 'Prax', 'Christien', 'Anderson', 'Havelock', 'Ashford', 'Bull', 'Anna', 'Arjun', 'Souther', 'Carissa', 'Samara']
    myscores = [89, 98, 76, 76, 84, 93, 82, 64, 63, 75, 76, 86, 96, 75, 86, 100, 99, 87, 84, 94]

    name = input("Please enter a name:")
    #search through mynames to find the name
    while name!='q':
        for x in range(20):
            if mynames[x] == name:
                print(mynames[x], "scored", myscores[x])
            else:
                print("That name is not in this class.")
                name = input("Please enter a name:")
        name = input("Please enter a name:")

不管我输入什么,它总是打印“这个名字不在这个类中”。求救


Tags: nameininputelseprintenterpleasealex
2条回答

我认为在这里使用dictionary会让您受益匪浅。请参见下面的示例

mynames = ['Naomi', 'James', 'Amos', 'Alex', 'Bobbie', 'Josephus', 'Fred', 'Camina', 'Julie', 'Prax', 'Christien', 'Anderson', 'Havelock', 'Ashford', 'Bull', 'Anna', 'Arjun', 'Souther', 'Carissa', 'Samara']
myscores = [89, 98, 76, 76, 84, 93, 82, 64, 63, 75, 76, 86, 96, 75, 86, 100, 99, 87, 84, 94]
name_score_map = dict(zip(mynames, myscores))

name = input("Please enter a name:")
#search through mynames to find the name
while name!='q':
    if name in name_score_map:
        print(name, "scored", name_score_map[name])
    else:
        print("That name is not in this class.")
    name = input("Please enter a name:")

在第一行中,我们构建了一个字典,将学生的名字映射到他们得到的分数。这样就不需要遍历mynames列表来查看其中是否有名字,然后使用相应的索引来获取分数。实际上,这消除了您在print("That name is not in this class.")执行mynames[x] != name的每个迭代时所面临的问题

然后我们可以通过查看名称是否在name_score_map中来检查名称是否有分数。这将搜索的时间复杂度从O(n)降低到O(1)。然后,我们可以简单地通过使用名称作为name_score_map字典的键来获取分数

if语句每次通过循环都会被求值,因此您需要跟踪是否找到了名称,然后只在末尾打印

例如:

    while name!='q':
        found = False
        for x in range(20):
            if mynames[x] == name:
                print(mynames[x], "scored", myscores[x])
                found = True
                break
         if not found:
             print("That name is not in this class.")
         name = input("Please enter a name:")

相关问题 更多 >