编码的的思路:
1、依次输入要查询日期的年、月、日;
2、将输入的日期与2018年进行比较
- year>=2018年时:首先判断年份是否是闰年,闰年天数加366,否则天数加365;然后判断月份,如果当年是闰年,月份要按照 list1 相加,否则按照 list2 相加。
- year<2018年时:首先判断年份是否是闰年,闰年天数加366,否则天数加365;然后判断月份,如果当年是闰年,月份要按照 list1 相加,否则按照 list2 相加。
解释一下为什么要以2018年去划分,其实不管输入的年份大于还是小于2018年,都是闰年天数加366,否则天数加365,其最主要的差别是在月份的计算上,其差别可以具体参考代码。
具体思路见下面的代码:
#随机输入日期,计算出星期几
print("2018年1月1号是星期一,作为参考日期")
year=int(input("请输入要查询的年份:"))
mon=int(input("请输入要查询的月份:"))
day=int(input("请输入要查询的天:"))
list1=[31,29,31,30,31,30,31,31,30,31,30,31] #闰年2月份为29天
list2=[31,28,31,30,31,30,31,31,30,31,30,31] #平年2月份为28天
date=0
years=0
#输入的年份大于等于2018年的判断过程如下:
if year>=2018:
for j in range(2018,year):
if (j%4==0)&(j%100!=0) or j%400==0: #闰年
years += 366
else: #平年
years += 365 #闰年天数加366天,平年加365天
if ((year%4)==0)&((year%100)!=0) or ((year%400)==0):
for i in range(mon-1):
date += list1[i] #闰年月份按list1相加
days=date+day
else:
for i in range(mon-1):
date += list2[i] #平年月份按list2相加
days=date+day
total=days+years
ji=total%7 #参考日期是2018年1月1号是星期一
#由于"ji=0"时,输出的结果是"星期0",因此对"ji"进行了判断,使"ji=0"时输出的结果为"星期7"
if ji!=0:
print(year,'年',mon,'月',day,'日','是星期',ji)
else:
print(year,'年',mon,'月',day,'日','是星期',7)
#输入的年份小于2018年的判断过程如下:
else:
for j in range(year+1,2018):
if (j%4==0)&(j%100!=0) or j%400==0:
years += 366
else:
years += 365
if ((year%4)==0)&((year%100)!=0) or ((year%400)==0):
for i in range(mon-1,12):
date += list1[i]
days=date-day+1
else:
for i in range(mon-1,12):
date += list2[i]
days=date-day+1
total=days+years
ji=total%7
if ji!=0:
#余数为1是星期7,余数为2是星期6...,总结规律为8-ji
print(year,'年',mon,'月',day,'日','是星期',8-ji)
else:
print(year,'年',mon,'月',day,'日','是星期',1)
结果如下:
D:\st11\python\lesson3.12.9>date.py
2018年1月1号是星期一,作为参考日期
请输入要查询的年份:2018
请输入要查询的月份:12
请输入要查询的天:24
2018 年 12 月 24 日 是星期 1
D:\st11\python\lesson3.12.9>date.py
2018年1月1号是星期一,作为参考日期
请输入要查询的年份:2020
请输入要查询的月份:7
请输入要查询的天:8
2020 年 7 月 8 日 是星期 3
D:\st11\python\lesson3.12.9>date.py
2018年1月1号是星期一,作为参考日期
请输入要查询的年份:2012
请输入要查询的月份:3
请输入要查询的天:4
2012 年 3 月 4 日 是星期 7
D:\st11\python\lesson3.12.9>date.py
2018年1月1号是星期一,作为参考日期
请输入要查询的年份:2015
请输入要查询的月份:10
请输入要查询的天:11
2015 年 10 月 11 日 是星期 7