Python 如何检查闰年日期是否有效

Python 如何检查闰年日期是否有效,python,validation,leap-year,Python,Validation,Leap Year,我试图检查这个日期是否有效,但我一直在试图找出闰年日期是否有效。我不断收到这样的信息: 最后一次运行于2018年2月11日12:49:03 你的函数说1754年2月29日是有效的,但它是无效的 我知道这不是闰年。在validDate函数中,每当一年不是闰年时,我都试图返回一个值False 如果您能给我任何信息,我将不胜感激。多谢各位 def isLeapYear(y): assert y > 1753, False return y % 4 == 0 and (y % 10

我试图检查这个日期是否有效,但我一直在试图找出闰年日期是否有效。我不断收到这样的信息:

最后一次运行于2018年2月11日12:49:03 你的函数说1754年2月29日是有效的,但它是无效的

我知道这不是闰年。在validDate函数中,每当一年不是闰年时,我都试图返回一个值False

如果您能给我任何信息,我将不胜感激。多谢各位

def isLeapYear(y):
    assert y > 1753, False
    return y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)


def daysIn(y, m):
    assert 1 <= m <= 12, False
    if m == 9 or m == 4 or m == 6 or m == 11:
        return 30
    elif m == 1 or m == 'March' or m == 'May' or m == 'July':
        return 31
    elif m == 8 or m == 10 or m == 12 or m == 3 or m == 5 or m == 7:
        return 31
    elif m == 2 and isLeapYear(y) is True:
        return 29
    elif m == 2 and isLeapYear(y) is False:
        return 28
    else:
        return False


def validDate(y, m, d):

    try:
        if daysIn(y, m) and isLeapYear(y):
            return True
    except AssertionError:
        return False

    if y > 1753 and 1 <= m <= 12 and 1 <= d <= 31:
        return True
    elif y == isLeapYear(y) and m == 2 and d == 29:
        return False
    else:
        return False


if __name__ == "__main__":
    isLeapYear(2012)
    daysIn(2012, 10)
    validDate(1752, 10, 10)
def isLeapYear(y):
断言y>1753,则为False
返回y%4==0和(y%100!=0或y%400==0)
def daysIn(y,m):

assert 1您可以使用标准库datetime模块

from datetime import date

def validDate(y, m, d):
    try:
        date(y, m, d)
        return True
    except ValueError:
        return False

问题出在
validDate
函数中,在该函数中,您不检查日期,但仅当月份有天时才检查(每个月都是如此)


daysIn
返回一个数字,但您只是在一个条件下使用它,就好像它是一个布尔值一样。您没有检查您的
d
是否在
daysIn
指定的长度内。不要使用
assert
检查用户输入。显式引发异常,
ValueError
将是一个不错的选择。好的,但我如何检查闰年是否有效?@KhatraAhmed:您检查的年份是否为闰年是正确的,但您的其余代码则不是。@KhatraAhmed:如果日期无效,函数将返回
False
datetime
模块将leapyears考虑在内。@HåkenLid:我理解,但我希望它在特定范围内,而不是所有年份,我希望其他函数中的其他断言也能使用。
def validDate(y, m, d):
    assert 1 <= d <= daysIn(y, m)
def validDate(y, m, d):
    if y <= 1754:
        return False
    if not (1 <= m <= 12):
        return False
    if m in (1, 3, 5, 7, 8, 10, 12):
        days = 31
    elif m == 2:
        leap = y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)
        days = 29 if leap else 28
    else:
        days = 30
    return 1 <= d <= days