我们知道这是一个闰年,如果它可以被4整除,如果它是一个世纪的年份,它可以被400整除。我想我需要两个这样的If语句:
def isLeap(n):
if n % 100 == 0 and n % 400 == 0:
return True
if n % 4 == 0:
return True
else:
return False
# Below is a set of tests so you can check if the code is correct.
from test import testEqual
testEqual(isLeap(1944), True)
testEqual(isLeap(2011), False)
testEqual(isLeap(1986), False)
testEqual(isLeap(1956), True)
testEqual(isLeap(1957), False)
testEqual(isLeap(1800), False)
testEqual(isLeap(1900), False)
testEqual(isLeap(1600), True)
testEqual(isLeap(2056), True)
当我尝试上面的代码时,我收到了多年的错误消息
1800 - Test Failed: expected False but got True
1900 - Test Failed: expected False but got True
基本上我需要我的代码说“如果年份可以被4整除,那么测试就是真的,如果它是一个世纪的年份,它就可以被400整除”。但是当我尝试:
if n % 4 and (n % 100 == 0 and n % 400 == 0):
return True
else:
return False
我收到三条错误消息(多年来)
1944 - Test Failed: expected True but got False
1956 - Test Failed: expected True but got False
2056 - Test Failed: expected True but got False
所以看起来我创建第二个条件(可被100和400整除)已经取消了可以被4整除的年份。
答案 0 :(得分:1)
试试这个:
rand()
问题在于,如果是一个世纪的年份,你希望年份可以被4或者400整除。
return (n % 100 != 0 and n % 4 == 0) or n % 400 == 0
答案 1 :(得分:1)
正如评论中所提到的,这已经内置:calendar.isleap
您可以简单地看到source here:
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
答案 2 :(得分:1)
写出长形将如此(多年> 1600):
def isLeapYear(year):
if year % 4 != 0:
return False
elif year % 100 != 0:
return True
elif year % 400 != 0:
return False
else:
return True
答案 3 :(得分:1)
这是一个更长,可能不那么令人困惑的版本:
def isLeap(n):
if n % 4 == 0:
if n % 100 == 0:
if n % 400 == 0:
return True
return False
return True
return False