我试图比较两个不同的变量是否位于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
进行此类比较的最佳方法是什么?
答案 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中,逻辑运算符由关键字and
,or
和not
组成。在你的情况下:
if 1 <= a <= 4 and 2 <= b <= 5:
print 'Yes'
答案 3 :(得分:0)
&
是一个按位运算符。使用和代替&amp;。
if 1 <= a <= 4 and 2 <= b <= 5:
print 'Yes'