2016-06-01 13 views
0

Hy ...我只是在學python。我做了這樣一個程序:missbehaviour的「OR」在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循環運行下去。那裏發生了什麼?我以爲環路將I輸入可以是H或T之後

+1

當'guess'是'h'時,顯然不會't';作爲繼續的條件之一是'guess!='t'',它滿足繼續循環的條件。 – metatoaster

回答

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': 
+0

謝謝,我錯過了... :) –

2

那不是不良行爲;這就是布爾邏輯在所有語言中的工作原理。對於這種比較,您需要使用and

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

這行基本上說:如果我的輸入不是'h'或我的輸入不是't',請重複循環。由於控制檯輸入不能同時爲「h」和「t」,因此該循環將永久重複。你確定你不是在尋找while guess != 'h' and guess != 't'while not (guess == 'h' or guess == 't')(從邏輯的角度來看它們都是相同的)?