首页 > 解决方案 > 来自 Automate the Boring Stuff 的示例程序未按描述工作

问题描述

我一直在浏览互联网,但在任何地方都没有看到这个,所以这一定是我做过的事情,但我不确定是什么。

《Automate the Boring Stuff with Python》一书使用以下代码来解释字典:

    birthdays = {'Alice': 'Apr 1', 'Bob': 'Dec 12', 'Carol': 'Mar 4'}
    while True:
            print('Enter a name: (blank to quit)')
            name = input()
            if name == '':
                    break

    if name in birthdays:
            print(birthdays[name] + ' is the birthday of ' + name)
    else:
            print('I do not have birthday information for ' + name)
            print('What is their birthday?')
            bday = input()
            birthdays[name] = bday
            print('Birthday database updated.')

此代码不会为我生成任何错误,但是当我运行它时,当我尝试在字典中输入其中一个名称时它没有返回任何内容。如果我什么都不输入,程序会反应“我没有他们生日是什么时候的生日信息?”

我尝试通过以下方式调整代码:

birthdays = {'Alice': 'Apr 1', 'Bob': 'Dec 12', 'Carol': 'Mar 4'}

while True:
    print('Enter a name: (blank to quit)')
    name = input()
    if name == '':
        break

    if name in birthdays:
        print(birthdays[name] + ' is the birthday of ' + name)
    else:
        print('I do not have birthday information for ' + name)
        print('What is their birthday?')
        bday = input()
        birthdays[name] = bday
        print('Birthday database updated.')

现在我可以输入现有名称并获得正确的结果,但如果我输入的名称不在字典中,它不会返回任何内容并再次告诉我输入名称。

显然这只是一个例子,我知道它应该做什么,但它为什么要这样做呢?

标签: pythonpython-3.xdictionary

解决方案


birthdays[name] = bday

这一行是第二个代码块之后的问题。您必须用新值更新字典中的值。在您的示例中,您将 分配给bday应该已经在字典中的名称。

编辑:

birthdays = {'Alice': 'Apr 1', 'Bob': 'Dec 12', 'Carol': 'Mar 4'}

while True:
    print('Enter a name: (blank to quit)')
    name = input()
    if name == '':
        break

    if name in birthdays:
        print(name + ' birthday is ' + birthdays[name])
    else:
        print('I do not have birthday information for ' + name)
        print('What is their birthday?(ex: Apr 4): ')
        bday = input()
        birthdays.update({name: bday})
        print('Birthday database updated.')
        print(birthdays)

推荐阅读