2 回答

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊
您使用and和or不正確。
表達(dá)式 x 和 y 首先計算 x;如果 x 為假,則返回其值;否則,評估 y 并返回結(jié)果值。// https://docs.python.org/3/reference/expressions.html#boolean-operations
此外,雙下劃線函數(shù)用雙下劃線標(biāo)記,特別是作為人們通常不應(yīng)該使用它們的標(biāo)記。
(其中一種)正確的寫法是:
my_tuple=('A','B','D')
if 'A' in my_tuple or 'E' in my_tuple:
print(True)
else:
print(False)

TA貢獻(xiàn)1831條經(jīng)驗 獲得超9個贊
首先,不要那樣使用__contains__。像這樣使用in。
if ('A' or 'E') in ('A', 'B', 'C'):
pass
希望這將開始顯示您的問題所在。在被調(diào)用a or b之前正在評估,__contains__并且只有一個值正在測試是否包含。
該語句('A' or 'E')將簡化為'A'。這就是您的第一個案例是打印的原因True。
if ('E' or 'B') in ('A', 'B', 'C'):
pass
對于您的第二個案例('E' or 'B')將評估為'E',而不是 in ('A', 'B', 'C'),因此您的第二個案例將打印False。
附錄
要更正此代碼,您應(yīng)該考慮得更冗長一些。
values = ('A', 'B', 'C')
if 'A' in values or 'E' in values:
pass
if 'E' in values or 'B' in values:
pass
添加回答
舉報