如何检查闰年日期是否有效
How to check if leap year date is valid
我正在尝试检查日期是否有效,但我一直在尝试确定闰年日期是否有效。我不断收到这样的消息:
最后 运行 2018 年 2 月 11 日,12:49:03
你的函数说 29/2/1754 是有效的,但它是无效的。
我知道今年不是闰年。我正在尝试在 validDate 函数中 return 每次年份不是闰年时的 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)
您可以使用标准库日期时间模块。
from datetime import date
def validDate(y, m, d):
try:
date(y, m, d)
return True
except ValueError:
return False
问题出在 validDate
函数中,您不检查日期,但仅当月份有天时才检查(每个月都是 True)。
def validDate(y, m, d):
assert 1 <= d <= daysIn(y, m)
或者如果 validDate
应该 return 一个布尔值,试试:
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
我正在尝试检查日期是否有效,但我一直在尝试确定闰年日期是否有效。我不断收到这样的消息:
最后 运行 2018 年 2 月 11 日,12:49:03 你的函数说 29/2/1754 是有效的,但它是无效的。
我知道今年不是闰年。我正在尝试在 validDate 函数中 return 每次年份不是闰年时的 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)
您可以使用标准库日期时间模块。
from datetime import date
def validDate(y, m, d):
try:
date(y, m, d)
return True
except ValueError:
return False
问题出在 validDate
函数中,您不检查日期,但仅当月份有天时才检查(每个月都是 True)。
def validDate(y, m, d):
assert 1 <= d <= daysIn(y, m)
或者如果 validDate
应该 return 一个布尔值,试试:
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