测试字典中的错误

时间:2019-09-11 01:39:32

标签: python dictionary

我正在做与字典一起工作的家庭作业。目的是创建一个程序,该程序具有以名字和生日作为值的字典。它的意思是要求输入他们想知道生日的人。我正在尝试添加一个“功能”,如果他们在词典中没有输入名称,它将输出类似“抱歉,该名称未重新确认,请重试。”之类的消息。

我在下面尝试了一些方法,但是它不起作用。

birthdays = {
    "Jeremy" : '3/28/01',
    "Jacob" : '6/30/01',
    "Colin" : '10/5/00',
    "Chris Evans" : '6/13/81',
    "Robert Downey Jr." : '4/4/65',
    "Ryan Reynolds" : '10/23/76',
}
def run_program():
    print("This is a program that will tell you the birthdays of some of my friends as long as some famous names!")
    print("We have the birthdays of: ")
    for key in birthdays:
        print(key)
    return_value = input("Whose birthday would you like to know?: ")
    for key in birthdays:
        if[return_value] not in birthdays[]:
            print("I'm sorry try again?")
            return_value = input("Whose birthday would you like to know?: ")
        else
            print(str(return_value.lower().capitalize())+ "'s birtday is: ")
            print(birthdays[return_value.lower().capitalize()])

if __name__ == '__main__':
    run_program()

3 个答案:

答案 0 :(得分:0)

尝试以下代码。我猜您的需求是直到找到匹配项之前,您都要提出问题,因此请使用while循环。当条件满足时,您只需中断并退出循环。另外,在字典中搜索键时遇到了一些错误。

def run_program():
    print("This is a program that will tell you the birthdays of some of my friends as long as some famous names!")
    print("We have the birthdays of: ")
    for key in birthdays:
        print(key)
    return_value = input("Whose birthday would you like to know?: ")
    while True:
        if return_value not in birthdays.keys():
            print("I'm sorry try again?")
            return_value = input("Whose birthday would you like to know?: ")
        else:
            print(str(return_value.lower().capitalize())+ "'s birtday is: ")
            print(birthdays[return_value.lower().capitalize()])
            break

if __name__ == '__main__':
    run_program()

答案 1 :(得分:0)

欢迎来到StackOverflow!第16行中没有执行您想要的操作的原因之一就是

if[return_value] not in birthdays[]:

这是不正确的语法,有两个原因。第一,变量名称在用于这种检查时不会放在方括号中。第二,除非您要在所述词典中找到特定的键,否则不要将括号放在词典名称的后面。

因此,该行应更改为类似的内容

if return_value not in birthdays:

此外,如果他们输入不在词典中的名称,则当提示他们输入另一个名称时,该名称将不执行任何操作。只是结束程序而没有输出。在尝试自己修复该部分后,我可以稍作修改。

答案 2 :(得分:0)

好的,生日是一本字典。如果您尝试访问字典中不存在的键,则python会引发KeyError,因此您可以在代码中进行try / catch并处理丢失的键。

除此之外,您的代码有一些小错误,但是请不要害怕它们在我们乞讨时很常见

    for key in birthdays:
        print(key)

您要打印生日键,因此需要birthdays.keys()来返回字典中的键列表,因此

    for key in birthdays.keys():
        print(key)

收到名称后,您要检查该名称是否在生日字典中。在python中,有一个使用EAFP的约定(要求宽恕比允许容易)。这告诉我们的是,更多使用 pythonic 来使用try / catch代替if / else。在这种情况下,您可以尝试访问密钥并处理KeyError(如果不存在),这就是方法

   ...
   while True:
       return_value = input("Whose birthday would you like to know?: ")
       try:
          print(f"{return_value.lower().capitalize()}'s birthday is {birthdays[return_value.lower().capitalize()]}")
          break
       except KeyError as e:
          print("I'm sorry try again?")

致谢