如何解决Python日期生成未生成正确的日期
我是python的初学者,我制作了这个随机日期生成器,该生成器应该生成year-month-date输出。而4,6,9,11个月有30天,其他所有31天。
但是我遇到一个问题,即使if和elif的条件下M必须为2,leap年的2月仍然生成date = 30。
import random
import calendar
for i in range(500):
Y = rand.randint(0,170)
M = rand.randint(1,12)
if calendar.isleap(G+1850) == True and M == 2:
D = rand.randint(1,28)
elif calendar.isleap(G+1850) == False and M == 2:
D=rand.randint(1,29)
if M == 4 or M == 6 or M == 9 or M == 11:
D=rand.randint(1,30)
else:
D=rand.randint(1,31)
解决方法
评论中提到的几个问题:
- 您使用的是
rand
而不是random
- 您正在使用
G
时,应该使用Y
查看重构的代码,重写if
语句以首先测试M
,然后测试Y
。
import random
import calendar
for i in range(500):
Y = random.randint(0,170)
M = random.randint(1,12)
if M == 2:
if calendar.isleap(Y + 1850):
Dmax = 28
else:
Dmax = 29
elif M in [4,6,9,11]:
Dmax = 30
else:
Dmax = 31
D = random.randint(1,Dmax)
print(Y,M,D)
一种更蟒蛇的方法是使用timedelta
从原点创建一个随机日期。
import random
from datetime import datetime,timedelta
def random_date(start: datetime,end: datetime):
days = (end - start).days
return start + timedelta(days=random.randint(0,days))
start = datetime(1850,1,1)
end = datetime(2020,12,31)
for i in range(500):
print(random_date(start,end))
,
如果M == 2
执行最后的else块并覆盖D
。
简单的解决方案是将两个if部分重新排序:
import random as rand
import calendar
for i in range(500):
G = rand.randint(0,170)
M = rand.randint(1,12)
if M == 4 or M == 6 or M == 9 or M == 11:
D=rand.randint(1,30)
else:
D=rand.randint(1,31)
if calendar.isleap(G+1850) == True and M == 2:
D = rand.randint(1,28)
elif calendar.isleap(G+1850) == False and M == 2:
D=rand.randint(1,29)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。