闰年的规则是:
(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
答案 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 == 0
和and
,因此y % 4 == 0
与and
无关,y % 100 != 0
使用{{1}}会导致表达总是错误的。