# 输入年月日,如:1995年12月10日,计算是该年的第几天?
# 同时计算出当天是星期几?
print("请依据提示依次输入您想查询的年 月 日")
# 第一段代码块(年月日输入)开始
# 输入年份并对输入值进行判断其合理性
while True:
year = int(input("请输入您想查询所在的年份(1970~2038年):"))
if 1970 <= year <= 2038:
if (year%4 ==0 and year%100 !=0) or year%400 == 0:
# leap = 0 表示润年
leap = 0
# print(leap)
else:
# leap = 1 表示平年
leap = 1
print("您输入的年份为%d年" %year)
break
else:
print("您输入的年份为%d年,不在1970年至2038年之间,请您依据提示再次输入" %year)
# 年份输入代码结束
# 输入月份并判断输入值进行判断其合理性,主要分润年和非润年
while True:
print("-------------------------------------------------")
month = int(input("请输入您想查询所在的月份:"))
if 1<= month <= 12:
print("您输入的月份为%d月" %month)
break
else:
print("您输入的月份为%d,不在1月至12月之间,请您依据提示再次输入" %month)
# 月份输入代码结束
# 1 3 5 7 8 10 12 月31天 4 6 9 11月 30天 润年2月29天 2月28天
# standard_month 表示平年中每个月对应的天数
standard_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 输入具体时间并对时间进行判断,依据年 月来判断其合理性
while True:
print("-------------------------------------------------")
day = int(input("请输入您想查询的具体日期:"))
if leap ==0:
if month == 2 and 0 <= day <= 29:
print("您输入的是%d年%d月%d日" %(year,month,day))
break
else:
print("您输入的日期为%d,超过%d月的最大天数%d天,请您依据提示再次输入" %(day, month, 29))
if 0 <= day <= standard_day[month-1]:
print("您输入的是%d年%d月%d日" %(year,month,day))
break
else:
print("您输入的日期为%d,超过%d月的最大天数%d天,请您依据提示再次输入" %(day, month, standard_day[month-1]))
elif leap == 1:
if 0 <= day <=standard_day[month-1]:
print("您输入的是%d年%d月%d日" %(year,month,day))
break
else:
print("您输入的日期为%d,超过%d月的最大天数%d天,请您依据提示再次输入" % (day, month, standard_day[month - 1]))
# 日期代码输入结束
# 第一段代码块(年月日输入)结束
# 第二段代码块(依据输入的年月日判断为该年的第几天)开始
print("-------------------------------------------------")
# 计算天数变量的初始化
sum_day = 0
# 月的约束条件,
# 当输入是month=1月时,(n=1)<(mont=1)时不成立,1月不计入月数累加
# 当输入是month=2月时,(n=1)<(mont=2)时成立,1月计入月数累加
# 依次类推
n = 1
# 循环计算上月及之前月份的累加和(天数)
while n < month:
sum_day += standard_day[n]
n += 1
# 计算总天数
sum_day += day
# 判断平润年,如果是平年,则直接输出,如果是润年,则使sum_day数值再加1,
if leap == 0:
print("您输入的%d年%d月%d日是该年的第%d天" %(year, month, day, (sum_day+1)))
else:
print("您输入的%d年%d月%d日是该年的第%d天" %(year, month, day, sum_day))
# 第二段代码块(判断该日期是该年的第几天)结束
# 第三段代码块(判断该天是星期几)开始
print("-------------------------------------------------")
from datetime import datetime
# datetime模块中有delta类,这个类的对象用于表示一个时间间隔,比如两个日期或者时间的差别
# 格式化输入时间
get_day = datetime(year,month,day)
# 格式化初始时间1970年1月1日 星期四
standard_day = datetime(1970,1,1)
# diff_day = get_day - standard_day 该段代码输出的为 1 days 00:00:00
# 输入日期与起始1970年1月1日 星期四 之间的相差天数diff_day
diff_day = (get_day - standard_day).days #经过修改过后,这样输出就是日期了
# 相差天数对7取余数
week_day = diff_day % 7
# week_day 余数加上1970年1月1日当天星期四的天数
week_day += 4
# 两者相加可能会大于7,if判断循环
if week_day >7:
week_day %= 7
print("您输入的%d年%d月%d日是星期%d" %(year, month, day, week_day))
else:
print("您输入的%d年%d月%d日是星期%d" %(year, month, day, week_day))
# 第三段代码块(判断该天是星期几)结束
# import sys
# sys.exit()结束程序循环