复杂的简单Python
有人能解释一下为什么if条件有效吗复杂的简单Python,python,if-statement,Python,If Statement,有人能解释一下为什么if条件有效吗 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 = 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'
等。由于运算符优先级,==
的优先级高于或等
x==0xAA
首先计算并返回False
,但其他每个十六进制字符都返回True,因此基本上表达式变为
x=False或True或True或True
这将导致True
您应该修改代码以获得所需的op
x = 0xA5
if x == (0xAA or 0x5A or 0xA0 or 0xAB):
print("Host Address is Correct")
在此处检查运算符优先级
saurabh认为这是一个优先问题是正确的,您的表达式的计算如下:
x == (0xAA or 0x5A or 0xA0 or 0xAB)
当您最可能想使用:
x in (0xAA, 0x5A, 0xA0, 0xAB)
0x5A
为真,因此条件为真。也许你的意思是x in(0xAA,0x5A,0xA0,0xAB)
?也许你想检查x是否等于这些值中的任何一个?如果[0xAA,0x5A,0xA0,0xAB]中的x是90-什么意思是它是真的?@JeshKundem>当作为布尔值计算时,任何非零整数都被认为是真的(比如这里)。它不是检查0x5a==True
,这显然是错误的,而是检查它是否真实。你是对的,@FranciscoCouzo,我的措辞很糟糕。我将编辑以重新措辞我不认为这是OP想要的(计算0xAA或0xA0没有意义)。我想他实际上是想比较每种价值观。他的问题是为什么它不起作用,他不清楚他想要什么