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

时间:2015-04-11 07:58:05

标签: python if-statement logical-operators

我试图比较两个不同的变量是否位于Python的两个不同范围内,使用逻辑运算符'&'以及关系运营商' if'。问题可能是一个愚蠢的问题,我相信它会被投票,但即便如此,为什么这段代码不起作用呢?

代码

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

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

4 个答案:

答案 0 :(得分:2)

and是布尔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操作符及它们之间的一般关系。

答案 1 :(得分:1)

考虑:

>>> 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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

&是一个按位运算符。使用代替&amp;。

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