Day14:Python基础编程(循环)能力训练50天——日期

这篇博客介绍了如何使用Python解决计算日期在一年中所处天数的问题。通过拆分日期、累加前几个月天数,并考虑闰年的条件,实现了一种解决方案。文章提供了两种不同的编码实现,包括使用字典和仅函数的方法,并展示了运行结果。
摘要由CSDN通过智能技术生成

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天!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值