我正在寻找关于我对这个问题的答案我的逻辑出错的指导:
'给定2个int值,如果一个为负数且一个为正数,则返回True。除非参数“negative”为True,否则仅当两者都为负时才返回True。'
这是我的尝试。我以为我走在正确的轨道上,我哪里出错?
def pos_neg(a, b, negative):
if negative:
if a < 0 and b < 0:
return True
elif ((a < 0 or b > 0) or (a > 0 or b < 0)):
return True
else:
return False
这是解决方案:
def pos_neg(a, b, negative):
if negative:
return (a < 0 and b < 0)
else:
return ((a < 0 and b > 0) or (a > 0 and b < 0))
答案 0 :(得分:4)
让我们从negative
分支开始:
if negative:
if a < 0 and b < 0:
return True
如果if a < 0 and b < 0
不是True,您不会返回任何内容,但是您应该返回False
:
if negative:
if a < 0 and b < 0:
return True
else:
return False
这也可以简化,因为a < 0 and b < 0
已经是应该返回的结果,所以你也可以使用较少的详细信息:
if negative:
return a < 0 and b < 0
然后在第二种情况下出现逻辑错误:
elif ((a < 0 or b > 0) or (a > 0 or b < 0)):
如果(a < 0)
和 (b > 0)
为True,则会触发,对于第二个parens也是如此。所以它应该是:
elif ((a < 0 and b > 0) or (a > 0 and b < 0)):
return True
else:
return False
同样,你可以在这里使用较少的详细信息:
else:
return ((a < 0 and b > 0) or (a > 0 and b < 0))
答案 1 :(得分:1)
由于@MSeifert解释了您的错误,这里的版本更简洁:
def pos_neg(a, b, negative):
return a * b < 0 if not negative else a < 0 and b < 0
答案 2 :(得分:1)
评论涵盖了您的语义错误(或vs和)。
从风格上来说,使用代码表示:
是一种不好的形式if condition:
return True
else:
return False
你应该这样做:
return condition
请注意,绝对不需要在括号中写入返回值,即这样更好:
def pos_neg(a, b, negative):
if negative:
return a < 0 and b < 0
else:
return a < 0 and b > 0 or a > 0 and b < 0
为了便于阅读,可以将参数括在括号中最后一行的or
中,但由于这是Python,我们也可以这样做:
def pos_neg(a, b, negative):
if negative:
return a < 0 > b
else:
return a < 0 < b or a > 0 > b
最后一行比一组嵌套和/或子句要好得多。
现在,如果你想要最短的解决方案(假设我们正在处理整数),那么可能:
def pos_neg(a, b, negative):
return (a & b if negative else a ^ b) < 0
依赖于负整数的二进制表示: - )