我有這樣的代碼:Python布爾幫助!
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
它只有X == "Cat"
工作。有人在這裏知道我的錯誤嗎?
我有這樣的代碼:Python布爾幫助!
if (X or Y) == ("Cat" or "Dog" or "Fish" or "Bird"):
print X, Y
它只有X == "Cat"
工作。有人在這裏知道我的錯誤嗎?
我想你想這樣的邏輯:
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的邏輯運算符返回與操作數相同類型的值(假設兩個操作數都是相同的類型)。短路評估解釋了這裏的or
和and
的行爲。
在任何情況下,對字符串執行邏輯操作都沒有意義!
發生什麼事是你正在努力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!
如果是"trucy",或它的第二個參數否則or
運營商在Python返回第一個參數。比較的右側始終評估爲"Cat"
,而左側爲X
,只要X
爲「真實」。
用最簡潔的方式來獲得你正在尋找的邏輯是
if set((X, Y)) & set(("Cat", "Dog", "Fish", "Bird")):
# whatever
我給你+1,但我達到了我的選票限額。 – 2011-03-11 16:31:21
您的問題是在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
現在這是一個偉大的寫作。享受這個當之無愧的+1;) – delnan 2011-03-11 16:33:20
@delnan謝謝,但太糟糕了,我超過了帽子! – 2011-03-11 16:34:09