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

soc*_*pet 0 python logic python-2.7

所以我使用了下面的代码并且它继续评估为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
Run Code Online (Sandbox Code Playgroud)

还有这种变化:

s = 'Z_15'
sYr = int(s[2:])

if s.startswith('Z_') & sYr >= 15:
    new_format = True
else:
    new_format = False

print new_format
Run Code Online (Sandbox Code Playgroud)

我已经评估了连接的两个部分,并且它们评估为True,因此不确定我做错了什么.

mgi*_*son 7

&是按位运算符,它具有比普通逻辑运算符更高的优先级.所以,你的表达式被解析为:

if (s.startswith('Z_') & int(s[2:])) >= 15:
Run Code Online (Sandbox Code Playgroud)

哪个(在这种情况下)是:

if (True & 15) >= 15:
Run Code Online (Sandbox Code Playgroud)

简化为:

if 1 >= 15:
Run Code Online (Sandbox Code Playgroud)

这是一个明显错误的情况.


要解决此问题,请使用and具有逻辑and且具有正确优先级的运算符.