确定闰年

时间:2016-11-09 23:38:36

标签: python function if-statement testing nested

我们知道这是一个闰年,如果它可以被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整除的年份。

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