我希望下面的代码要求用户添加我将保存在字典中的联系人。
当用户回复N
是否要添加新联系人时,循环应该终止。当Y
时,循环必须继续,当他们输入的内容既不是N
也不是Y
时,问题必须不断重复,直到他们输入Y
或N
。
当我输入是
时,我的代码不会返回到函数的开头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问题之后,我没有让程序重复
答案 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()