Python 使用While循环处理多个条件/异常

Python 使用While循环处理多个条件/异常,python,while-loop,Python,While Loop,我试图创建一个while循环,它接受特定的输入,但如果输入不符合条件,则要求用户重新提交。但是,在添加while循环之后,输入一个输入会简单地冻结程序,直到我手动停止它(无论输入是否与标准匹配) 更新-已调整while循环: while currentRoundAnswer not in ["C", "D", "E", "F", "G", "A", "H"]

我试图创建一个while循环,它接受特定的输入,但如果输入不符合条件,则要求用户重新提交。但是,在添加while循环之后,输入一个输入会简单地冻结程序,直到我手动停止它(无论输入是否与标准匹配)

更新-已调整while循环:

while currentRoundAnswer not in ["C", "D", "E", "F", "G", "A", "H"]:
    playsound(currentPath)
    currentRoundAnswer = input("Sorry, you submitted your answer in an incorrect format. The sound has been played again. What do you think is the corresponding musical note? Possible answers: C, D, E, F, G, A, H. Be sure to capitalize the letters.")
    if currentRoundAnswer not in ["C", "D", "E", "F", "G", "A", "H"]:
        continue
    else:
        break

您可以将中的
关键字用作:

while currentRoundAnswer in ["C", "D", "E", ...]:

while循环是无限的,因此您的程序将在一个紧密的循环中执行,并且可能会变得无响应

这是因为条件与您认为的不同,即测试用户是否输入了任何有效注释。其实是这样的:

while (currentRoundAnswer == "C") or ("D") or ("E") or ("F") or ("G") or ("A") or ("H"):
    continue
因为即使答案不是
C
D
,就条件而言,也被认为是正确的

更好的方法是在
中使用
,测试可能的响应列表或字符串的成员资格:

NOTES = 'CDEFGAH'    # where is B?
while currentRoundAnswer in NOTES:
   ...

您的代码还有很多其他问题。逻辑无处不在,您需要了解如何在Python中执行用户交互。检查此问题的提示

首先,while条件始终为true(请参阅)。其次,在循环中不更新
currentRoundAnswer
,因此即使条件写得正确,它仍然是一个无限循环。谢谢你,我这样调整了代码:
,而currentRoundAnswer在[“C”、“D”、“E”、“F”、“G”、“A”、“H”]:#在一些欧洲国家使用H代替B:)break-else:playsound(currentPath)currentlroundanswer=input(“对不起,您提交的答案格式不正确。声音已重新播放。您认为相应的音符是什么?可能的答案:C、D、E、F、G、A、H。请确保字母大写。”)
现在,当我输入与指定条件不匹配的输入时,它会重新播放并再次请求输入。1/2但是,当我再次以不正确的格式输入输入时,代码会从while循环中断,而不是重复警告。我错过了什么?2/2你读了吗?你应该用你修改过的代码更新你的问题-它在评论中无法阅读。感谢你的耐心:)我重新阅读了这篇文章并调整了问题中的代码。它现在工作得很好,但我在循环中有两次相同的条件,这似乎有点不必要。我相信有一种更合乎逻辑的方法来做这件事。。。
NOTES = 'CDEFGAH'    # where is B?
while currentRoundAnswer in NOTES:
   ...