【发布时间】:2016-12-21 23:29:33
【问题描述】:
哪个是“更正确(逻辑上)”? 特定于闰年,而不是一般。
-
带括号
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) -
没有
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
其他信息
括号改变了布尔值的计算顺序(and 在 or 之前,没有括号)。
考虑到在这个问题中所有较大的数字都可以被较小的数字整除,无论哪种方式它都会返回正确的结果,但我仍然很好奇。
观察括号的效果:
False and True or True #True False and (True or True) #FalseFalse and False or True #True False and (False or True) #False
没有括号,在某些情况下,即使 year 不能被 4 整除(第一个 bool)它仍然返回 True(我知道这在这个问题中是不可能的)! 不是必须被 4 整除,因此包含括号更正确吗?还有什么我应该注意的吗?有人可以解释不/包括括号的理论逻辑吗?
【问题讨论】:
-
括号改变了评估顺序,而不是默认的从左到右。因此,在种植它们之前,您实际上必须有更改顺序的理由
-
发表评论并不意味着我投了反对票。
标签: python boolean-logic parentheses leap-year