Python 无限循环由或复合条件引起,但在使用 not() 时不然


test = ''
# This loop infinitely
while test != 'O' or test != 'X':
test = raw_input("Enter: ").upper()
# This works fine   
while not(test == 'O' or test == 'X'):
test = raw_input("Enter: ").upper()

not和使用!=有什么区别?

问题是你的连词:你没有正确地应用德摩根定律。 当你分发否定时,你需要从or翻转到and

not(test == 'O' or test == 'X')

相当于

test!= 'O' and test!= 'X'

看看test!= 'O' or test!= 'X'的逻辑:无论你给test什么字符,它都不会等于两个测试字符中的至少一个。F0rO,第二句为True;对于X,第一个是True;对于任何其他字符,这两个子句都True。 要克服这个问题,你需要一个同时XO的角色。

我们不是在用Python做量子变量...至少现在还没有。 您必须使用自定义相等运算符编写一个新类才能完成此操作。

...如果你一路走Pythonic,你会写

while not test in ('O', 'X'):

或者 - 甚至更简单

while not test in 'OX':

最新更新