python条件语句不合理的结果

时间:2017-07-18 16:54:38

标签: python conditional

我试着理解为什么我从以下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):

没关系,但我试着理解为什么以上都不起作用。

5 个答案:

答案 0 :(得分:1)

由于operator precedence

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

答案 1 :(得分:1)

正如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"

另外,仅供参考,您正在编码xor operator

答案 2 :(得分:1)

由于运算符优先级,您需要将两个条件放在括号中以获得预期结果。否则,解析比较运算符,检查代码中的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) ,这不是您所期望的。

x < y <= z

请注意,所有比较运算符都具有相同的优先级,并且可以任意链接比较,例如,x < y等同于y <= z AND myrequest.model.ts export class MyRequest { public endValue: string; public yearEnd: string; }

答案 3 :(得分:0)

这是因为条件a < 0 != b < 0表示a < 00 != bb < 0首先当a >= 0第一个条件评估为False时,其他任何内容都不会被评估。然后,如果a是&lt; 0但是b = 1,则链中的最后一个条件是False。因此,您的链接条件为4次中的3次。

section 6.10的Python文档中对此进行了详细解释。

答案 4 :(得分:0)

this,您可以使其更具可读性:

from operator import xor
def print_if_neg (a, b):   
    if xor(a < 0, b < 0):
        print "Only One Neg"
    else:
        print "0 or 2"