所以我使用了下面的代码并且它继续评估为False,但它是True。作为一个Python 2.7菜鸟,我不知道为什么。
s = 'Z_15'
if s.startswith('Z_') & int(s[2:]) >= 15:
new_format = True
else:
new_format = False
print new_format
也是这种变化:
s = 'Z_15'
sYr = int(s[2:])
if s.startswith('Z_') & sYr >= 15:
new_format = True
else:
new_format = False
print new_format
我已经评估了连接的两个部分,并且它们评估为True,所以不确定我做错了什么。
答案 0 :(得分:7)
&
是按位运算符,它比普通逻辑运算符higher precedence。所以,你的表达式被解析为:
if (s.startswith('Z_') & int(s[2:])) >= 15:
(在这种情况下)是:
if (True & 15) >= 15:
简化为:
if 1 >= 15:
这显然是假的。
要解决此问题,请使用and
运算符,该运算符执行逻辑and
且具有正确的优先级。
答案 1 :(得分:2)
当您使用逻辑和运算符,而不是按位和运算符
时,您将得到答案将您的代码修改为:
s = 'Z_15'
if s.startswith('Z_') and int(s[2:]) >= 15:
new_format = True
else:
new_format = False
print new_format
答案 2 :(得分:1)
除了其他答案,你可以这样做
s = 'Z_15'
new_format = s.startswith('Z_') and int(s[2:]) >= 15
print new_format