var = 86
print((var<90) & (var>=80))
但
print(var<90 & var>=80)
print(var<90 & (var>=80))
print((var<90) & var>=80)
print(var<90 & True)
`
爲什麼所有這些給假?
var = 86
print((var<90) & (var>=80))
但
print(var<90 & var>=80)
print(var<90 & (var>=80))
print((var<90) & var>=80)
print(var<90 & True)
`
爲什麼所有這些給假?
以print(var<90 & True)
爲例,
print(var<90 & True)
相當於print(var < (90 & True))
,因此它賦予假。
但是,如果將括號放在正確的地方,即print((var<90) & True)
,那麼它會給出True。
位運算符&
的優先級高於比較運算符,因此首先對90 & var
進行評估,然後進行鏈接比較。
>>> var = 86
>>> var<90 & var>=80 # var<90, and '90&var' is greater than or equal to 80
False
>>> var<(90 & var)>=80 # same as above
False
>>> (var<90) & (var>=80)
True
您應該使用and
運算符代替布爾操作。
由於Python支持鏈接關係運算符(即你可以使用0 < var < 100
代替0 < var and var < 100
)和處理的二進制運算(即加,減,逐位操作等)前關係運算符由於運算符優先級,所有失敗的你發佈的案例實際上意味着別的東西
var < 90 & var >= 80
相當於(var < 90 & var) and (90 & var >= 80)
var < 90 & (var>=80)
相當於var < 90 & True
針對看看第四情況。(var<90) & var>=80
也類似於第四種情況(這解析爲True & var >= 80
然後將解析爲0 >= 80
)。var < 90 & True
相當於var < (90 & True)
。 &
運算符的實現旨在返回0
,如果其中一個操作數不是整數(這是動態類型的另一個最大缺陷),這就是爲什麼所有這些類似語句都解析爲var < 0
這是錯誤的原因。
你爲什麼試圖使用按位運算符來執行布爾運算? –
嘗試用'和'替換'&';你在做什麼並不合情理。 – 101
我知道我想使用'和'運算符。我只是想知道爲什麼這些是假的。 @ IgnacioVazquez-Abrams –