Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂的简单Python_Python_If Statement - Fatal编程技术网

复杂的简单Python

复杂的简单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: 它检

有人能解释一下为什么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==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没有意义)。我想他实际上是想比较每种价值观。他的问题是为什么它不起作用,他不清楚他想要什么