gpt4 book ai didi

python - 闰年 bool 逻辑 : Include Parentheses?

转载 作者:太空狗 更新时间:2023-10-30 01:45:50 29 4
gpt4 key购买 nike

哪个“更正确(逻辑上)”? 特定于闰年,而不是一般情况

  1. 带括号

    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
  2. 没有

    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

附加信息

圆括号改变了 bool 值的计算顺序(andor 之前没有圆括号)。

鉴于在这个问题中所有较大的数字都可以被较小的数字整除,它会返回正确的结果,但我仍然很好奇。

观察括号的效果:

  1. False and True or True
    #True

    False and (True or True)
    #False
  2. False and False or True
    #True

    False and (False or True)
    #False

没有括号,有些情况下即使 year 不能被 4 整除(第一个 bool)它仍然返回 True(我知道这在这个问题中是不可能的)! 被 4 整除不是必须的,因此包含括号更正确吗?还有什么我应该注意的吗?有人可以解释不/包括括号的理论逻辑吗?

最佳答案

括号会影响 bool 值的顺序。 and s 组合在一起并在 or 之前解决s 是,所以:

a and b or c

变成:

(a and b) or c

如果两个ab是真实的,或者如果 c是真实的,我们得到True .

有了括号你会得到:

a and (b or c)

现在你得到 True如果两个a是真实的b或者 c是真实的。


就“正确性”而言,只要您的代码得出正确的结果,那么“更正确”只是一个见仁见智的问题。我会在您认为可以使结果更清晰的地方包括括号。例如:

if (a and b) or c:

更清晰
if a and b or c:

但是(在我看来)它并不比:

if some_long_identifier and some_other_long_identifier or \
some_third_long_identifier_on_another_line:

编写 Python 代码时的指南应该是 PEP8 . PEP8 对何时应该包含文体括号(阅读:遵循自然操作顺序的括号)保持沉默,因此请使用您的最佳判断。


特别是对于闰年,逻辑是:

  1. 如果年份可以被 4 整除,则转到第 2 步。...
  2. 如果年份可以被 100 整除,则转到第 3 步。...
  3. 如果年份可以被 400 整除,则转到第 4 步。...
  4. 该年为闰年(有 366 天)。
  5. 这一年不是闰年(它有 365 天)。

换句话说:所有能被 4 整除的年份都是闰年,除非它们能被 100 整除且不能被 400 整除,这意味着:

return y % 4 == 0 and not (y % 100 == 0 and y % 400 != 0)

关于python - 闰年 bool 逻辑 : Include Parentheses?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960503/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com