循环问题时的python联系簿

时间:2017-11-30 09:44:25

标签: python python-3.x loops dictionary while-loop

我希望下面的代码要求用户添加我将保存在字典中的联系人。

当用户回复N是否要添加新联系人时,循环应该终止。当Y时,循环必须继续,当他们输入的内容既不是N也不是Y时,问题必须不断重复,直到他们输入YN

当我输入是

时,我的代码不会返回到函数的开头

contactbook = {}

def addcontact():
    name = input("Enter the name of your new contact")
    number = int(input("Enter your phone contact"))
    contactbook[name] = number
    print("Contact book successfully updated with  :   ", contactbook.items())
    while True:
        qu = 'X'
        while qu not in 'YN':
            qu = input("Do you want to add a new contact? Y/N").upper()
        elif qu == 'N':
            break

在我回答Y问题之后,我没有让程序重复

3 个答案:

答案 0 :(得分:0)

这是因为您要分配名为keepadding的变量。循环测试名为keepreading的变量的值。由于这些变量不同,测试将始终为True,即使您输入N,循环也会继续。

更新代码以初始化函数顶部的变量并测试正确的变量:

def addcontact():
    keepadding = True
    while keepadding:
        ....

更改OP代码后更新:

while循环移动到函数顶部,以便在循环内发生input()和联系簿更新。将elif更改为if。这是一个工作版本:

contactbook = {}

def addcontact():
    while True:
        name = input("Enter the name of your new contact")
        number = int(input("Enter your phone contact"))
        contactbook[name] = number
        print("Contact book successfully updated with  :   ", contactbook.items())
        qu = 'X'
        while qu not in 'YN':
            qu = input("Do you want to add a new contact? Y/N: ").upper()
        if qu == 'N':
            break

答案 1 :(得分:0)

你可以通过某种方式更清洁地实现这种逻辑。像:

def addcontact():
    while True:   # no variable like keepadding needed
        name = ...
        # ...
        qu = 'X'
        while qu not in 'YN':
            qu = input("Do you want to add a new contact? Y/N").upper()
        if qu == 'N':  
            break
        # no need to specify the 'Y' case, the outer loop just continues

答案 2 :(得分:-1)

试试这个:

contactbook = {}

def addcontact():
    keepadding = True

    while keepadding:
        name = input("Enter the name of your new contact: ")
        number = int(input("Enter your phone contact: "))
        contactbook[name] = number

        print("Contact book successfully updated with {}, {}".format(name, number))

        while True:
            qu = input("Do you want to add a new contact? Y/N ").upper()
            if qu in 'YN':
                break
            print("That's not a valid input. Try again.")

        keepadding = qu.upper() == 'Y'


addcontact()