为什么在 Python 中逻辑运算符不能与关系运算符一起使用?

Why can't logical operators be used with relational operators in Python?

我正在尝试使用逻辑运算符“&”和关系运算符 'if' 来比较两个不同的变量是否位于 Python 中的两个不同范围内。这个问题可能很愚蠢,我相信它会被否决,但即便如此,为什么这段代码不起作用?

代码

a = 2.0
b = 3.0

if 1 <= a <= 4 & 2 <= b <= 5:
    print 'Yes'

if 1 <= a <= 4:
    print 'Yes, a'

if 2 <= b <= 5:
    print 'Yes, b'

输出

Yes, a
Yes, b

进行此类比较的最佳方法是什么?

请注意,& 是按位运算符而不是逻辑运算符。

在python中,逻辑运算符由关键字andornot组成。你的情况:

if 1 <= a <= 4 and 2 <= b <= 5:
    print 'Yes'

考虑:

>>> a = 2.0
>>> b = 3.0
>>> 
>>> if 1 <= a <= 4 & 2 <= b <= 5:
...     print 'Yes'
... 
>>> if 1 <= a <= 4 and 2 <= b <= 5:
...     print 'Yes'
... 
Yes

& 是按位 operator.Use and 而不是 &.

if 1 <= a <= 4 and 2 <= b <= 5:
    print 'Yes' 

and 是布尔值 AND。 & 是按位与。

因为按位 AND 比 <= 运算符具有 higher precedence(即它更具约束力),所以当您不将左右布尔比较表达式包装在括号中时,它会首先被计算。

所以评价是这样的:

1 <= a <= 4 & 2 <= b <= 5

1 <= 2.0 <= (4 & 2) <= 3.0 <= 5

1 <= 2.0 <= 0 <= 3.0 <= 5

这显然是False。你想要的是:

1 <= a <= 4 and 2 <= b <= 5

这里不需要括号,因为 and 运算符的优先级低于 <=,因此默认情况下将首先计算左右表达式。

operator precedence table值得一看。您不需要记住它,但它有助于理解所有 Python 运算符以及它们之间的一般关系。