2013-03-06 31 views
1

在Python 2.7有人可以解釋這裏的邏輯或我問什麼? (布爾運算)

詢問時解釋如下:

(1 or 3) > 2返回False

這是爲什麼?我有效地問口譯員什麼,顯然不是1或3是否大於2。

同樣,問(1 or 5) in range(2,6)也返回False

我100%肯定它與聲明我的(X或Y)部分做的,但同樣,這是爲什麼?我不需要這麼多,說明這樣的事情不同的方式,因爲我知道我可能只是問:

if x in range(2,6) or y in range(2,6): 

但我只是想知道爲什麼它不工作!

+2

'或'不工作,你如何看待它 - 它需要左側和右側,調用'布爾()'他們兩個,並檢查是否要麼造成的值爲'True',並返回第一個(如果沒有,則返回False)。做到這一點的最好方法是'any(x> 2 for(in(1,3))'。 – 2013-03-06 08:14:27

+1

@Lattyware,一個小小的修正,如果左側評估爲「真」,它不會嘗試評估右側。 – GilZ 2013-03-06 08:18:19

+0

@Gil真的,我的解釋過於簡單。 – 2013-03-08 01:07:09

回答

4

讓我們來看看(1 or 3) > 2

來表達你想表達什麼正確的方法是:

>>> 1 > 2 or 3 > 2 
True 

另外一個更一般的,方法如下:

>>> t = (1, 3) 
>>> any(el > 2 for el in t) 
True 

這裏,t可以是任何迭代。

+0

這很有道理!謝謝!它不會單獨評估括號中的每個整數,對於任何兩個整數,它只會返回第一個整數? – Rym 2013-03-06 08:16:42

+1

@Rym除非[link](http://www.diveintopython.net/power_of_introspection/and_or.html)中的第一個整數爲'0' – Volatility 2013-03-06 08:17:53

+1

+1,那麼這是一個很好的鏈接。 :) – 2013-03-06 08:18:45

0

1(理解爲數字)被評估爲true(所有數字評估爲true,0除外),所以不需要評估3(理解爲數字)。
這是因爲您使用的是OR的條件,即「停止」評估到第一個找到的值true
那麼,是1 > 2?答案是false

你必須分解,或者分成兩個獨立的條件:

1 > 2 or 3 > 2 
0

1對應於真。因此,對於

1 or 3 

結果是

1 

1 > 2 

是假的。

而且你能知道這一點,如果你一直試圖 1 or 3

在外殼

答案。

0

這不是布爾操作的正確用例。首先應該是:

(1 > 2) or (3 > 2) 

表達:

(1 or 3) > 2 

會先制定出1 or 3然後試圖弄清楚,如果是大於二。

同理:

(1 or 5) in range(2,6) 

可能是更好的表達爲:

(1 in range(2,6)) or (5 in range(2,6)) 

或:

((1 >= 2) and (1 < 6)) or ((5 >= 2) and (5 < 6)) 
0

我要去把我的兩分錢到這個問題爲好。

當Python評估您的發言

(1 or 3) > 2 

這是做什麼的,嘿嘿!我們先拿第一個號碼,然後撥打bool()就可以了。這裏的任何數字不是0將被評估爲True並返回。

你可以嘗試(10000 or 3),它總是返回最左邊「變量」,只要它不是0

相反的例子是,如果你有

(0 or 3) 

然後接着計算表達式,這基本上將在僞代碼表示的其餘部分:

returned number (wheter its the left or right) is greater than 2

這就是它變得奇怪的地方,因爲括號的評估方式,你的表情總是會有所不同。 在你的情況下,它會

1 > 2 == False(0 or 3) > 2 == True

至於range一部分,該邏輯同樣適用。 在括號中,左邊的數字將被「返回」,因此不會在您的範圍檢查中可用。

(1 or 4) in range(2,5) == False

+0

如果我有更多的聲望,我也會贊成這個答案。非常感謝您的意見! – Rym 2013-03-06 08:47:19

+0

不用擔心,夥計!很高興幫助一下! :) – 2013-03-06 08:50:42

相關問題