为什么我们Python代码在它是真的时评估为false?

时间:2015-10-20 18:19:08

标签: python python-2.7 logic

所以我使用了下面的代码并且它继续评估为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,所以不确定我做错了什么。

3 个答案:

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

你可以read this article for more information

答案 2 :(得分:1)

除了其他答案,你可以这样做

s = 'Z_15'
new_format = s.startswith('Z_') and int(s[2:]) >= 15
print new_format