def date():
date = input()
d,m,y = date.split('/')
yd400 = int(y) % 400
yd4 = int(y) % 4
yd100 = int(y) % 100
if m == '2' and d == '30':
print('Invalid Date')
elif m == '2' and d == '29' and (yd400 != 0 or (yd4 != 0 and yd100 == 0)):
print('Invalid Date')
elif d == '31' and (m == '2' or m == '4' or m == '6' or m == '9' or m == '11'):
print('Invalid Date')
else:
print('Valid Date')
有没有办法简化这部分?
(elif d == '31' and (m == '2' or m == '4' or m == '6' or m == '9' or m == '11'))
我写这篇文章是为了验证插入日期的有效性,而不使用import datetime
答案 0 :(得分:4)
对集合使用成员资格测试:
d == '31' and m in {'2', '4', '6', '9', '11'}
请注意,您的代码可能需要处理月份和日期部分中的前导0
个字符:
d, m = d.lstrip('0'), m.lstrip('0')
因此02/03/2015
仍被视为有效日期。
答案 1 :(得分:0)
在上面的示例中,您的上面的代码似乎对大量错误的输入感到非常满意-每月大于32天,负数日或负数月,即0年...
您似乎已经考虑过正确设置leap年,这是值得称赞的,但是很简单
datetime.datetime.strptime(input(), '%m/%d/%Y')
不仅具有“仅需工作”的功能,而且可读性强,并且不需要像您上面制作的产品那样多的维护。
您询问了如何在没有import datetime
的情况下执行此操作-这是一个危险信号。已经有人进行了繁重的工作,您可能会因此受益。