i = 200
j = 201
if i == 200 | j == 201:
print "Hi"
else:
print "No"
它應該打印「你好」,對不對?那麼爲什麼要打印「否」?Python條件語句中的多個條件
i = 200
j = 201
if i == 200 | j == 201:
print "Hi"
else:
print "No"
它應該打印「你好」,對不對?那麼爲什麼要打印「否」?Python條件語句中的多個條件
在Python中|
和&
是按位運算符,他們做位計算。
另一方面,and
和or
是邏輯(布爾)運算符。
|是位運算和Python腳本做到位計算 這裏使用此
i = 200
j = 201
if i == 200 or j == 201:
print "Hi"
else:
print "No"
這個問題實際上是運算符優先級之一,沒有具體使用按位|
而不是邏輯or
的; True | True
和True or True
給出了相同的結果。
每Python docs比較==
比按位|
優先級高,所以你的條件表達式計算到:
i == (200 | j) == 201
哪個是假的。如果您添加括號以說明:
(i == 200) | (j == 201)
您會得到您所期望的行爲。
但是,正確的做法是使用or
。使用or
的原因是沒有括號,因爲布爾運算符的優先級比比較低。另外:
TypeError
在腳本語言中,還應該考慮處理'None'。 'True或None'不會拋出異常,'(True | None)'拋出'TypeError'。 'True和None'等於'None',但在if語句中的作用與False相同。 – nigel222
也考慮功能評估。 Python'和'和'or'使用短路邏輯,所以'f()或g()'調用'f',但是如果'f'返回True或者「truthy」,不會調用'g'。 'g()或f()'在'g'返回true時調用'g'而不是'f'。 '(f()| g())'將總是調用'f'和'g'。當'f'或'g'是調用時影響實例狀態的類實例的方法時,這變得非常重要。 – nigel222
@ nigel222是的,使用'或'確實是正確的,但這並不是OP代碼無法按預期工作的原因。我會做得更清楚。 – jonrsharpe
。注意,如果'(I == 200)| (j == 201):'會做你期望的...... – jonrsharpe