我试着理解为什么我从以下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):
没关系,但我试着理解为什么以上都不起作用。
答案 0 :(得分:1)
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 < 0
和0 != b
和b < 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"