2016-11-10 44 views
-1

任何人都可以解釋爲什麼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 
+6

'0x5A'爲真,所以條件成立。也許你的意思是'(0xAA,0x5A,0xA0,0xAB)'? – spectras

+0

也許你想檢查x是否等於任何這些值? – Peaceful

+1

'如果x在[0xAA,0x5A,0xA0,0xAB]' –

回答

2

Python是不是做了什麼你認爲它是 - 當你說

if x == 0xAA or 0x5A or 0xA0 or 0xAB: 

它檢查是否x==0xAA0x5a是「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'

+0

它不檢查'0x5a == True',這顯然是錯誤的,它檢查它是否真實。 –

+0

你是對的,@FranciscoCouzo,形式不好的措辭形式。我將編輯爲 – asongtoruin

2

由於運營商優先級,==擁有較高的優先級,因此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

+0

我不認爲這是OP想要的(計算0xAA或0xA0是沒有意義的)。我想他實際上是想比較每個價值。 – spectras

+0

@Spectras他的問題是爲什麼它不工作,他不清楚他想要什麼 –

0

SAURABH是正確的它是一個優先的問題,你的表達正在評估這樣的:

x == (0xAA or 0x5A or 0xA0 or 0xAB) 

當你最有可能要使用:

x in (0xAA, 0x5A, 0xA0, 0xAB)