即使条件合适,while循环也不会结束

时间:2017-10-15 12:51:28

标签: python while-loop

我正在做一个登录系统。它要求用户回答问题('您是否已经拥有帐户?')虽然答案不是或否,但它应该继续询问。

print('Welcome to the quiz!')
print('Do you already have an account? ')
have_acc = input()
while have_acc != ('Yes') or have_acc != ('No') or have_acc != ('yes') or have_acc != ('no'):
    print('Please enter Yes or No')
    have_acc = input()

输出

Welcome to the quiz!
Do you already have an account? 
yes
Please enter Yes or No
no
Please enter Yes or No
Yes
Please enter Yes or No
No
Please enter Yes or No

4 个答案:

答案 0 :(得分:3)

更典型的方法:

while input.lower() not in ('yes', 'no',):
    ... your retry code ...

答案 1 :(得分:0)

问题在于逻辑。 '是'!='否',所以其中一个条件总会受到影响。我不熟悉python语法,逻辑上你需要的是:

while not (input == ‘Yes’ or input == ‘No’)

此时,任何一场比赛都会很好

答案 2 :(得分:0)

您的while - 循环条件存在缺陷,比如我输入Yes,它会从左到右评估条件并注意have_acc != ('Yes'),但是因为它是在使用or关键字之前,它会评估其余条件 - 如果一个是True,那么它将运行while循环中的代码,这里的问题是have_acc != ('No')True评估为('Yes' != 'No') == True,因此整个语句将评估为True,从而在循环中执行代码。

你想要做的是一个更干净,更简约的版本,这样不容易出错:

print('Welcome to the quiz!')
print('Do you already have an account? ')
have_acc = input().lower()

while have_acc not in ('yes', 'no'):
    print('Please enter "yes" or "no"')
    have_acc = input().lower()
...

答案 3 :(得分:0)

为什么不使用此声明 虽然have_acc =="是"或者have_acc =="没有"      have_acc ELIF:       打印("请输入是或否")