闰年,以及它背后的布尔逻辑

时间:2016-03-14 17:37:13

标签: python

闰年的规则是:
(1)大多数可以平均分为4的年份是闰年。

(2)世纪年不是闰年,除非它们可以平均分为400年。

我无能为力,但我认为我应该和if ( y%4==0 and y%100!=0 and y%400 == 0 ): 我知道哪些是错的,但为什么呢?

这是真正的解决方案:

def year_days(y):
  if ( y%4==0 and y%100!=0 ) or ( y%400 == 0 ):
    return True

return False

2 个答案:

答案 0 :(得分:2)

拿2004年。现在2004 % 4 = 0 , 2004 % 100 != 0 , 2004 % 400 != 0所以最后一个条件失败了,所以尽管2004年是闰年,它会给你错误。

布尔逻辑背后的逻辑:

世纪年不是闰年,除非它们可以平均除以400. --->这给你所有年份除以400将是肯定的飞跃但是所有年份除以100可能不是。

大多数年份可以平均分为4年,是闰年。 --->任何一年除以4都是闰年,而不是那些世纪的某些年份

所以现在这样想:y divisible by 400总是飞跃。 除非它们不是世纪年,否则被4整除的总是飞跃(排除年份%400,因为它们之前已被照顾过)。所以这就产生了这样的条件:y%4 == 0 and y%100 != 0好像其中一个失败了,这一年并没有飞跃。 此外,现在如果(y%4 == 0 and y%100 != 0)为真或(y%400 == 0)为真,那么年份就是飞跃,所以你在它们之间或之间给你:

(y%4 == 0 and y%100 != 0) or (y%400 == 0)

答案 1 :(得分:0)

y % 4 == 0 暗示 y % 100 == 0and,因此y % 4 == 0and无关,y % 100 != 0使用{{1}}会导致表达总是错误的。