python条件语句无法解析的结果

2024-04-26 07:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解为什么我会从以下if中得到不合理的结果:

def print_if_neg (a,b):   
    if a < 0 != b < 0:
        print "Only One Neg"
    else:
        print "0 or 2"

print_if_neg(1,1)
print_if_neg(-1,1)
print_if_neg (1,-1)
print_if_neg(-1,-1)

我得到3次0 or 2,然后最后一次Only One Neg
这种复杂情况的顺序是什么

我试过这个:

if (a < 0) != (b < 0):

没关系,但我正在努力理解为什么上面的方法不起作用


Tags: or方法onlyif顺序def情况one
3条回答

这是因为条件a < 0 != b < 0首先意味着a < 00 != bb < 0,当a >= 0第一个条件的计算结果为False时,其他条件都不会被计算。那么,如果a是<;0但b=1链中的最后一个条件为False。因此,你的链式条件是错误的4次中的3次

这在Python文档的section 6.10中有很好的解释

正如CoryKramer所指出的,操作符的优先级起着决定性的作用

您的代码等效于:

def print_if_neg (a,b):   
    if a < (0 != b) < 0:
        print "Only One Neg"
    else:
        print "0 or 2"

因为根据语言定义,!=<具有更高的优先级

因此,使用()强制您需要的优先级:

def print_if_neg (a,b):   
    if (a < 0) != (b < 0):
        print "Only One Neg"
    else:
        print "0 or 2"

另外,仅供参考,您正在对^{} operator进行编码

由于operator precedence,您需要括号

def print_if_neg (a,b):   
    if (a < 0) != (b < 0):
        print "Only One Neg"
    else:
        print "0 or 2"

相关问题 更多 >