一、题目描述
输入某年某月某日,判断这一天是这一年的第几天?
二、解题思路
(一)解题基础
1.Python基础语法
2.流程控制
3.数据类型(字符串、列表)
(二)总体思路
由于一年的天数需要根据二月份的天数(28/29)来确定,而二月份的天数需要根据该年是否为闰年(平年28天/闰年29天)来确定。因此,先对年份进行是否是闰年的判断,确定二月份的天数,再根据月份计算前几个月的总天数Days,最后将Days与输入的Day相加得到第几天。
(三)编程思路
1.用变量Year、Month、Day分别保存用户通过input输入的年月日信息;
2.然后对Year进行闰年判断,闰年判断的条件是(Year%4== 0 and Year%100!=0) or (Year%400 == 0 and Year%3200!=0) or Year%172800==0),用if else语句判断,若满足条件,则二月份Feb=29,否则Feb=28;
3.然后根据月份Month确定月份循环累加的条件。设置变量month_num=1,Days=0,用while循环判断month_num<Month,满足条件则将month_num进行if elif else判断;
4.判断分为三类,一是,month_num为1/3/5/7/8/10/12,则Days+=31;二是month_num为4/6/9/11,则Days+=30;三是month_num为2,则Days+=Feb;然后Month+=1。循环累加后将得到的Days与Day相加得到第几天。
5.可以适当添加限制条件用while Ture判断输入的年月日是否合理,若不合理则给出警告,否则重新输入。
三、具体实现
(一)源代码
#判断第几天.py--根据输入的日期判断第几天?
while 1:
Year,Month,Day=input("请输入年 月 日(空格隔开):").split()#同时输入多个值
if Year.isdigit() and Month.isdigit() and Day.isdigit():#判断输入的日期是否为数字
if 1<=eval(Month)<=12: #判断日期是否合理
if 1<=eval(Day)<=31:
break
print("输入不合理!请重新输入!")
Year=eval(Year)
if (Year%4==0 and Year%100!=0) or (Year%400==0 and Year%3200!=0) or Year%172800==0:#判断闰年的条件
Feb=29
else:
Feb=28
Month_num=1
Days=0
Month_31=[1,3,5,7,8,10,12]#31天的月份
Month_30=[4,6,9,11]#30天的月份
while Month_num<eval(Month):#根据用户输入的月份循环累加天数
if Month_num in Month_31:
Days+=31
elif Month_num in Month_30:
Days+=30
elif Month_num==2:
Days+=Feb
Month_num+=1
print("这一天是这一年的第{}天".format(Days+eval(Day)))
(二)输入输出样例
1.输入:
请输入年 月 日(空格隔开):2022 10 二十五 输入不合理!请重新输入! 请输入年 月 日(空格隔开):2022 13 33 输入不合理!请重新输入! 请输入年 月 日(空格隔开):2022 10 25
2.输出:
这一天是这一年的第298天