在python中“OR”的missbehaviour

时间:2016-06-01 08:00:46

标签: python canopy

Hy ...我只是在学习python。我做了一个这样的程序:

guess = raw_input("please input something...");
while (guess != 'h'):
    guess = raw_input("pleae input something again....");
    print(guess);

print("Thanks...");

嗯......上面的程序运行良好。但是当我在猜测后输入“OR”时!='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

之后,我认为循环将结束

3 个答案:

答案 0 :(得分:9)

你的情况总是存在:

(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':

答案 1 :(得分:5)

while (guess != 'h') or (guess != 't') 

这条线基本上说:如果我的输入不是' h'重复循环。或者我的意见不是'。由于控制台输入不能同时输入' h'并且在同一时间,循环将永远重复。您确定自己不是在寻找while guess != 'h' and guess != 't'while not (guess == 'h' or guess == 't')(从逻辑的角度来看,它们都是相同的)吗?

答案 2 :(得分:2)

这不是不正当行为;这是布尔逻辑在所有语言中的工作原理。对于这种比较,您需要使用and