"OR" 在 python 中的不当行为
missbehaviour of "OR" in python
嘿...我正在学习 python。我做了一个这样的程序:
guess = raw_input("please input something...");
while (guess != 'h'):
guess = raw_input("pleae input something again....");
print(guess);
print("Thanks...");
嗯……上面的程序运行很好。但是当我像这样把 "OR" 放在 guess != 'h' 之后时:
guess = raw_input("please input something...");
while (guess != 'h') or (guess != 't'):
guess = raw_input("pleae input something again....");
print(guess);
print("Thanks...");
以上程序在 while 循环中永远 运行。那里发生了什么?我以为循环会在我输入 h 或 t
后结束
您的条件始终成立:
(guess != 'h') or (guess != 't')
总是正确的(如果一部分不正确,则意味着另一部分是正确的)。
如果你在这里使用 De-Morgan's law 你会得到一些更明显的东西:
not (guess == 'n' and guess == 't')
这显然是总是正确的(guess
只能是一件事)。
你可能想要:
(guess != 'h') and (guess != 't')
或者更好:
while guess not in 'ht':
这不是不当行为;这就是布尔逻辑在所有语言中的工作方式。对于这种比较,您需要使用 and
.
while (guess != 'h') or (guess != 't')
这一行基本上是说:如果我的输入不是 'h' 或者我的输入不是 't',则重复循环。由于控制台输入不能同时为 'h' 和 't,循环将永远重复。你确定你不是在寻找 while guess != 'h' and guess != 't'
或 while not (guess == 'h' or guess == 't')
(从逻辑的角度来看它们是相同的)吗?
嘿...我正在学习 python。我做了一个这样的程序:
guess = raw_input("please input something...");
while (guess != 'h'):
guess = raw_input("pleae input something again....");
print(guess);
print("Thanks...");
嗯……上面的程序运行很好。但是当我像这样把 "OR" 放在 guess != 'h' 之后时:
guess = raw_input("please input something...");
while (guess != 'h') or (guess != 't'):
guess = raw_input("pleae input something again....");
print(guess);
print("Thanks...");
以上程序在 while 循环中永远 运行。那里发生了什么?我以为循环会在我输入 h 或 t
后结束您的条件始终成立:
(guess != 'h') or (guess != 't')
总是正确的(如果一部分不正确,则意味着另一部分是正确的)。
如果你在这里使用 De-Morgan's law 你会得到一些更明显的东西:
not (guess == 'n' and guess == 't')
这显然是总是正确的(guess
只能是一件事)。
你可能想要:
(guess != 'h') and (guess != 't')
或者更好:
while guess not in 'ht':
这不是不当行为;这就是布尔逻辑在所有语言中的工作方式。对于这种比较,您需要使用 and
.
while (guess != 'h') or (guess != 't')
这一行基本上是说:如果我的输入不是 'h' 或者我的输入不是 't',则重复循环。由于控制台输入不能同时为 'h' 和 't,循环将永远重复。你确定你不是在寻找 while guess != 'h' and guess != 't'
或 while not (guess == 'h' or guess == 't')
(从逻辑的角度来看它们是相同的)吗?