day14
求日期是1年中的多少天
输入一个日期,求是该年中的第多少天?
分析
1.拆分日期,日期中日子就是当月的天数
2.再算前几个月的天数和
3.针对2月,要判断年份是否为闰年
编码实现
1.编码实现(函数、字典)
#判断是否为闰年
def leapyear(n):
if n%100==0: # 如果被100整除且被400整除,为闰年
if n%400==0:
return True
else:
return False
elif n%4==0: #不被100整除,但被4整除,为闰年
return True
else:
return False
#定义闰年月份日数
leapmonth={1:31,2:29,3:31,4:30,5:51,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
#定义非闰年月份日数
notleapmonth={1:31,2:28,3:31,4:30,5:51,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
dt=input("请输入一个日期(yyyy-mm-dd):")
#拆分获得年,月,日
year=eval(dt[:dt.find('-')]) #获得年份
month=eval(dt[dt.find('-')+1:dt.rfind('-')]) #获得月份
day=eval(dt[dt.rfind('-')+1:]) #获得日
days=day #初始化日数为当月的日数
if leapyear(year): #如果是闰年
for i in range(1,month): #计算前2月的日数并进行累加
days=days+leapmonth[i]
else:
for i in range(1,month+1): #如果是非闰年
days=days+notleapmonth[i]
print(f"{dt}是一年中的第{days}天!")
运行结果
请输入一个日期(yyyy-mm-dd):2020-5-20
2020-5-20是一年中的第141天!
2.编码实现(函数)
def leapyear(n):
if n%400==0 or (n%100!=0 and n%4==0):#综合条件:如果整除400或者非整除100且整除4的年份为闰年
return True
else: #其他为非闰年
return False
month31day=[1,3,5,7,8,10,12] #列出31天的月份,那么再抛开2月,其他月份就是30天
dt=input("请输入一个日期(yyyy-mm-dd):")
year=eval(dt[:dt.find('-')])
month=eval(dt[dt.find('-')+1:dt.rfind('-')])
day=eval(dt[dt.rfind('-')+1:])
days=day
for i in range(1,month):#针对1 至 当前月的前一月
if i==2: #如果是2月
if leapyear(year): #判断闰年
days+=29
else:
days += 28
else: #对于非2月
if i in month31day: #判断是不是31天的月份
days = days + 31
else:
days = days + 30
print(f"{dt}是一年中的第{days}天!")
运行结果
请输入一个日期(yyyy-mm-dd):2020-5-20
2020-5-20是一年中的第141天!