2013-09-25 21 views

回答

9

這是因爲("YP" or "XP")解析"YP",因爲它要求返回是否"YP""XP"決心True

在這種情況下,'或'是短路的(因爲"YP"不是False,"XP"未被評估)。它返回非False值"YP"這是... "YP"

另外a[:2]等於XP。此外,您不需要撥打str(),因爲a是一個字符串。

>>> a = "XPZC" 
>>> a[:2] 
'XP' 
>>> "YP" or "XP" 
'YP' 

你可能想使用in

>>> a[:2] in ("YP", "XP") 
True 

,或者只是檢查使用or兩個條件:

>>> s = a[:2] 
>>> s == "YP" or s == "XP" 
True 
+0

隨着這兩個改進,你可能甚至沒有注意到你還從OP的代碼中刪除了整個表達式中無用的額外括號。 :) – abarnert

+2

(「YP」或「XP」)要求返回「YP」還是「XP」解析爲True。在這種情況下,'或'短路(因爲「YP」不是假,「XP」未被評估)。它返回「YP」的非「False」值,即「YP」。 –

+0

@GraemeStuart yup,這是一個很好的解釋(比我的好得多),你應該把它作爲答案發布。謝謝。 – alecxe

1
(str(a)[:2] in ["YP", "XP"]) 

"YP" or "XP"返回'YP'