python中“或”的错误行为

python中“或”的错误行为,python,canopy,Python,Canopy,为什么。。。我只是在学python。我制作了一个这样的程序: guess = raw_input("please input something..."); while (guess != 'h'): guess = raw_input("pleae input something again...."); print(guess); print("Thanks..."); guess = raw_input("please input something..."); whi

为什么。。。我只是在学python。我制作了一个这样的程序:

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

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

print("Thanks...");
嗯。。。以上程序运行良好。但是当我猜的时候h’像这样:

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

print("Thanks...");
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')
如果一部分不正确,则表示另一部分不正确

如果你在这里使用,你会得到一些更明显的东西:

not (guess == 'n' and guess == 't')
这显然总是正确的猜测只能是一件事

您可能想要:

(guess != 'h') and (guess != 't')
或者更好:

while guess not in 'ht':

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


这一行基本上是这样的:如果我的输入不是'h'或我的输入不是't',重复循环。由于控制台输入不能同时为'h'和't',因此循环将永远重复。猜猜看,你确定你不是在找吗!='猜猜看t'或而不是guess=='h'或guess=='t'从逻辑角度来看,两者都是相同的?

当guess是h时,显然不会是t;因为继续的条件之一是猜测!='t',它满足继续循环的条件。谢谢,我理解错了…: