2011-03-11 75 views
2

我有這樣的代碼:Python布爾幫助!

if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"): 
    print X, Y 

它只有X == "Cat"工作。有人在這裏知道我的錯誤嗎?

回答

11

我想你想這樣的邏輯:

animals = ["Cat", "Dog", "Fish", "Bird"] 
if X in animals or Y in animals: 
    print X, Y 

在你的代碼中表達(「貓」和「狗」或「魚」或「鳥」)被視爲一個邏輯表達式,我我確定你不想要。正如它發生這種表達評估爲「貓」,這解釋了你觀察到的行爲。


>>> 'cat' or 'dog' 
'cat' 
>>> 'cat' and 'dog' 
'dog' 

這些都是串邏輯運算。非空字符串被視爲真值。空字符串被視爲False。 Python的邏輯運算符返回與操作數相同類型的值(假設兩個操作數都是相同的類型)。短路評估解釋了這裏的orand的行爲。

在任何情況下,對字符串執行邏輯操作都沒有意義!

+0

現在這是一個偉大的寫作。享受這個當之無愧的+1;) – delnan 2011-03-11 16:33:20

+0

@delnan謝謝,但太糟糕了,我超過了帽子! – 2011-03-11 16:34:09

1

發生什麼事是你正在努力X or Y,給你只是X。然後,你正在制定Cat or Dog or..,只給你Cat,因爲它不是0。

你想要的是:

if X in ("Cat","Dog", "Fish", "Bird") or Y in ("Cat","Dog", "Fish", "Bird"): 
    #taa daa! 
4

如果是"trucy",或它的第二個參數否則or運營商在Python返回第一個參數。比較的右側始終評估爲"Cat",而左側爲X,只要X爲「真實」。

用最簡潔的方式來獲得你正在尋找的邏輯是

if set((X, Y)) & set(("Cat", "Dog", "Fish", "Bird")): 
    # whatever 
+0

我給你+1,但我達到了我的選票限額。 – 2011-03-11 16:31:21

0

您的問題是在Python評估or的方式。如果a是真(非零,或非空字符串或對象)返回一個;否則返回b。所以"string" or b將始終評估爲"string"

所以"Cat" or "Dog" or "Fish" or "Bird"將始終評估爲"Cat"
X or Y將始終評估爲X(只要X是一個或多個字符的字符串)
X=="Cat"顯然,只有當X是「貓」真。

animals = set(["Cat","Dog","Fish","Bird"]) 
if X in animals or Y in animals: 
    print X, Y