为什么这会陷入一个恒定的循环?

时间:2014-11-19 18:23:56

标签: validation loops python-3.x while-loop uppercase

我无法理解为什么这不起作用:

EntryRow = input("Which row would you like to book for?")
Upper = EntryRow.upper()
while Upper != 'A' or 'B' or 'C' or 'D' or 'E':
    print("That is not a row")
    EntryRow = input("Which row would you like to book for?")
    Upper = EntryRow.upper()

3 个答案:

答案 0 :(得分:3)

'!='优先于'或'。你的代码真正做的是:

while (Upper != 'A') or 'B' or 'C' or 'D' or 'E':

总是如此。

请改为尝试:

while not Upper in ( 'A', 'B', 'C', 'D', 'E' ):

答案 1 :(得分:2)

您需要明确写出每个条件并使用and

组合它们
while Upper != 'A' and Upper != 'B' and ...

解释器将'B''C'等等作为独立条件,所有条件都计算为True,因此您的if语句始终为真。

答案 2 :(得分:1)

您正在以错误的方式使用or。 (正确的方式见Andrew's answer)。

一种可能的捷径是使用遏制检查:

while Upper not in ('A', 'B', 'C', 'D', 'E'):
    ...