任何人都可以解釋爲什麼if條件正在工作。Tricky Simple Python
x = 0xA5
if x == 0xAA or 0x5A or 0xA0 or 0xAB:
print "Host Address is Correct"
0xAA or 0x5A or 0xA0 or 0xAB binary operation is not equal to 0xA5 either
任何人都可以解釋爲什麼if條件正在工作。Tricky Simple Python
x = 0xA5
if x == 0xAA or 0x5A or 0xA0 or 0xAB:
print "Host Address is Correct"
0xAA or 0x5A or 0xA0 or 0xAB binary operation is not equal to 0xA5 either
Python是不是做了什麼你認爲它是 - 當你說
if x == 0xAA or 0x5A or 0xA0 or 0xAB:
它檢查是否x==0xAA
或0x5a
是「truthy」 - 其中一個非空字符串,例如,被認爲是True
- 依此類推。你得到的錯誤表明0x5A, 0xA0, 0xAB
之一是「truthy」。什麼,你需要做的是
if x == 0xAA or x == 0x5A or x == 0xA0 or x == 0xAB:
從而可以更加方便地爲
if x in [0xAA, 0x5A, 0xA0, 0xAB]:
表示雖然它應該指出的是,如果0xAA
等都是字符串,它們需要被寫爲'0xAA'
等
它不檢查'0x5a == True',這顯然是錯誤的,它檢查它是否真實。 –
你是對的,@FranciscoCouzo,形式不好的措辭形式。我將編輯爲 – asongtoruin
由於運營商優先級,==
擁有較高的優先級,因此or
所以 x==0xAA
首先評估並返回False
但其他每個十六進制字符都返回True,所以基本上你的表達式變成 x = False or True or True or True
這將導致True。
你應該修改你的代碼來獲得你想要的操作。
x = 0xA5
if x == (0xAA or 0x5A or 0xA0 or 0xAB):
print("Host Address is Correct")
這裏檢查運算符優先級 https://www.tutorialspoint.com/python/operators_precedence_example.htm
我不認爲這是OP想要的(計算0xAA或0xA0是沒有意義的)。我想他實際上是想比較每個價值。 – spectras
@Spectras他的問題是爲什麼它不工作,他不清楚他想要什麼 –
SAURABH是正確的它是一個優先的問題,你的表達正在評估這樣的:
x == (0xAA or 0x5A or 0xA0 or 0xAB)
當你最有可能要使用:
x in (0xAA, 0x5A, 0xA0, 0xAB)
'0x5A'爲真,所以條件成立。也許你的意思是'(0xAA,0x5A,0xA0,0xAB)'? – spectras
也許你想檢查x是否等於任何這些值? – Peaceful
'如果x在[0xAA,0x5A,0xA0,0xAB]' –