任何人都可以解释为什么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]' –