3 回答

TA貢獻1934條經驗 獲得超2個贊
這'ten' or '10' in compareName
部分不會給你你想要的結果。每次都會返回“十”!相反,您需要檢查“十”是否在 compareName 中,并檢查“10”是否在比較名稱中,并將 或 放在兩者之間,如下所示:
if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):

TA貢獻1942條經驗 獲得超3個贊
您似乎對編程的工作方式有根本的誤解。我強烈建議你在繼續(xù)之前閱讀一些比較。
這里的聲明:
if 'blazer' in compareName and 'ten' or '10' in compareName:
基本上評估為:
if (('blazer in compareName) == True) and ('ten' == True) or (('10' in compareName) == True):
假設compareName是 'blazerten',它將評估為:
if True and True or False:
# Note: Python evaluates OR before AND operators
# Result: True
看起來不錯?不!如果compareName是 'blazer',它將評估相同的東西。因為第二個條件'ten'總是評估為,True因為它不是一個空字符串,所以一旦你滿足第一個條件,第二個和第三個條件就沒有實際意義了。
正確的方法是提到的其他答案,您需要分別進行比較:
if 'blazer' in compareName and
'ten' in compareName or
'10' in compareName:
注意:如果您尊重操作優(yōu)先級,則不需要括號。
如果你覺得有點冒險,又不想重復太多,你可以嘗試用列表理解來表達:
if 'blazer' in compareName and
any([part in compareName for part in ['ten', '10']]):
第二個條件現在由any()函數處理。當然,需要注意的是,您放棄了一點可讀性。優(yōu)勢雖然是如果你需要比較多只'ten',并'10'在OR子句中,你可以簡單地添加到第二個條件的名單。

TA貢獻1841條經驗 獲得超3個贊
我相信有更好的方法可以做到這一點,但要簡單地維護您的語法并給出正確的答案,您的if語句應該是
if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):
func()
else:
pass
添加回答
舉報