2017-09-27 85 views
1

我對比較運算符感到困惑。例如,比較運算符給出|的不同值&與或相比 - Python

10 or 20 == 20 
# output, expected True 
10 

    10 | 20 == 20 
(10 | 20) == 20 
(10 or 20) == 20 

所有3行代碼給'假',但我期待'真'。

10 or 20 == 20 
# output gives 10, but was expecting True 
10 

又如:

10 and 20 > 2 
# output is as expected 
True 

(10 and 20) > 2 
True 

(10 & 20) > 2 
# output gives False, but was expecting True 
False 

最後,如果我這樣做:

10 or 20 > 100 
#output is 10. No idea why 
10 
3 or 8 < 200 
3 

誰能幫助清理這種混亂?非常感謝花時間閱讀我的困惑!我正在使用Python 3.6

+0

只需單獨打印每個表達式,然後您就會理解其複合的邏輯。例如'(10或20)'是10,但是「(10 | 20)」是30. – Zefick

+1

'10&20'是按位和',所以'01010&10100'(二進制),確實是'00000'這不高於2 – Rafalon

回答

0

它類似於真或假的情況下:

>>> 20 or 10 
20 
>>>(20 or 10) == 10 
False 
>>>(20 or 10) == 20 
True 

這是因爲它需要爲真,下一個爲假的第一個值,當你傳遞true或false你得到真正的同樣你獲得20實際上在這裏代表真實。 希望這有助於。

+0

感謝user8477766。我的問題是,如果每次只使用'=='運算符評估/比較第一個數字,那麼看起來幾乎毫無意義的做鏈比較運算符。也許只是'(20)== 10'給出'True'不要讓聲音卡住,但我個人不喜歡它背後的「邏輯」。似乎並不比'真或假==真'給出'真'。預先知道輸出時無意識地運行代碼。 – MichaelRSF

+0

@MichaelRSF你的例子似乎毫無意義,因爲*它毫無意義*。當您鏈接比較時,輸入*不會被重新評估,這就是爲什麼a jonrsharpe

2

這兩個條件運算符都會返回他們必須評估的最後一個條件或值。

or運算符評估這些條件中的任何一個是否爲真,並返回它評估的最後一個條件。由於10在Python(或任何其他語言)中被認爲是True,所以語言甚至不會經過第二個條件(或值)並返回第一個值。而在and的情況下,兩個條件都必須爲真,如果兩個條件都是真的,則返回第二個值,如果兩個條件都不成立,則返回第一個值。

>>> True or False 
True 
>>> False or True 
True 
>>> True and False 
False 

# Similarly 
>>> 10 or 20 
10 
>>> 10 and 20 
20 
>>> 0 or 10 
10 
>>> 0 and 10 
0 

這種行爲也提供了一定的b = a if a else c這種行爲的一個方便的選擇。

+0

謝謝hspandher,但說實話,我發現邏輯反直覺。我認爲說'10或20 == 20'並且期望'真實'而不是10是不合理的。如果只評估第一個數字,那麼比較鏈運算符有什麼意義,即'(10或者20或者30)> 15',它給出了「假」而不是「10」。 – MichaelRSF

+0

@MichaelRSF這種行爲可能會有一定的負面影響,但通常情況下,這種行爲非常方便。我不知道我有多少次使用這個東西作爲'if-else'結構的一個方便的替代方法。 – hspandher