我正在使用Anaconda和Spyder运行Python 3.6.4。
有谁知道为什么会发生以下情况?
当我执行以下代码时,python打印“是”,这显然是错误的。
import numpy as np
a = 0
c = np.ones(150)
b = np.ones(10)
if a < len(c) & len(b) < 3:
print('yes')
当我稍作修改时,条件不满意并且python不会打印任何内容
a = 0
c = np.ones(152)
b = np.ones(10)
if a < len(c) & len(b) < 3:
print('yes')
此外,如果我改变“&amp;” “和”一切都按预期工作。
答案 0 :(得分:2)
这是由于操作员链接,&
优先。试试这个,注意括号:
if (a < len(c)) & (len(b) < 3):
print('yes')
&
是一个按位运算符,因此可用于组合两个布尔条件。在Python中,bool
是int
的子类。
按位,len(c) & len(b)
的计算结果为2,因此您实际上正在评估:
if 0 < 2 < 3: # i.e. 0 < 2 and separately 2 < 3
答案 1 :(得分:0)
&
是一个按位而且。
and
是合乎逻辑的。 (使用它!它更干净,更pythonic)。
您还可以添加更多括号(a < len(c)) & (len(b) < 3):
,这样可行,尽管很难看。