一、题目
二、算法思想
- 原本想要使用
if
语句来进行每个月份的判断,之后发现使用这种方法的话就会出现许多的if
语句嵌套,不利于逻辑的纠错,经过思考后,发现使用字典会使代码更加简洁些。
- 使用字典来存储十二个月份中每个月的天数,针对二月时需要对年份进行判断,如果为闰年时就为
29
天,平年时为28
天。
- 使用
february
函数进行二月天数的求解,输入年份year
,如果为4
倍数且不为100
倍数时返回29
天;如果为400
倍数时返回29
天,剩下的情况就是平年返回28
天。
- 在主函数中,
year
、day
分别保存年份和总天数,使用num
来存储前几个月份的天数总和,以便之后在计算到第i
个月份时的判断;
- 然后遍历月份字典
dic
,i
为键、j
为值
- 如果前几个月的天数加上此月的天数比
day
大时,就说明找到了对应的月份,将day
的值减去前几个月的总天数num
就是当前月份的日期;
- 如果不位于此月份内,就添加当前月份的天数到
num
中。
三、代码
def february(year):
'''根据年份返回二月份天数'''
if year%4==0 and year%100!=0:
return 29
if year%400==0:
return 29
return 28
if __name__=='__main__':
year = int(input())
day = int(input())
dic = {
}
dic[1] = 31
dic[2] = february(year)
dic[3] = 31
dic[4] = 30
dic[5] = 31
dic[6] = 30
dic[7] = 31
dic[8] = 31
dic[9] = 30
dic[10] = 31
dic[11] = 30
dic[12] = 31
num = 0
for i,j in dic.items():
if num+j>=day:
day -= num
print(i)
print(day)
break
num += j