自定义时间函数

今日何日兮

今日何日兮?想要知道某年某月某日是这一年的第几天,给出了月份和月份对应天数的字典。

d = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}

请定义函数calDay(),传入参数年月日year,month,day。

def calDay(year,month,day):

1.判断是否为闰年,若是,则将2月日期改为29;

if year%400==0 or year%4==0 and year%100!=0:
        d[2]=29

2.判断年份格式是否正确,正确格式为4位数年份,若不在4位数年份范围,则输出"输入的年份格式错误!";

if year in range(1000,10000) and month in d and day in range(1,d[month]+1) :
        days=0
        for i in range(1,month) :
            days=days+d[i]
        num=day+days
        return f"{year}年{month}月{day}日是这一年的第{num}天!"
 elif year not in range(1000,10000):
        return f"输入的年份格式错误!"

3.判断月份格式是否正确,月份格式为1-12月,若不在范围内,输出"输入的月份格式错误!";

elif month not in d :
        return f"输入的月份格式错误!"

4.判断日是否在对应月份日的范围内,如4月,若输入的是31,则输出"输入的日格式错误!";

else :
        return f"输入的日格式错误!"

最后计算出2021年的5月20日是这一年的第几天,调用函数并输出结果"2021年5月20日是这一年的第xx天!"

print(calDays(2021,5,20))
这些步骤里面,我认为有难度的是年月日的判断,即年月日的范围,年的范围框定在(1000,10000)--1000可取,10000不可取,这个点并不难理解,month in d 的目的在于让计算机明确月份框定在字典中的12个月中,也就是存在于字典的键中。在这不得不提一下,键具有唯一性,值可以重复。 至于键值对的删除增加方法,我觉得可以单独去整理一份。而最难理解的,就是day in range(1,d[month]+1)了吧,举个例子,month=3,即d[3]+1,这个值不难得到是31+1=32,现在我们可以得到day的范围框定在(1,32)里面,其实际的范围也就是1~31,这也的确符合大小月的标准,而如果不在d[month]后面加上一个1,逻辑上就会存在问题,也就是当你想取31的时候,系统会找不到,自然就会报错。根据这个原理,自然可以把区间当作左闭右开。
解决了上述难题,接下来是给程序插入一个计数器,也就是days=0,这一个点也困扰了我好久,但仔细想想,如果你想累加或者累乘,在python的程序里不可或缺的自然就是计数器了,无独有偶,num=day+days这一步我刚开始也不明白,后来我想通了,假如还拿month=3举例,那我们计算它的天数在这一年的哪一天,就必须先算出前两个月一共的天数,这也就有了days=days+d[i],而(1,month)的逻辑也能自洽,(1,3)只能取1,2,这也正好是我们们需要的两个月份。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值