描述:给一个日期,并告诉你是周几;
然后再给你一个日期,请你判断这是周几。
#题目:1980 01 02 周五,求1980 01 04周几
# 随机输入日期,计算出星期几
print("2080年1月2号是星期二,作为参考日期")
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年的判断过程如下: day( 年 + 月 + 日 )% 7
if year >= 1980:
#计算出相差年份的天数
for j in range(1980, year): #注意若range(a,b)中a=b时,循环不执行
if (j % 4 == 0) & (j % 100 != 0) or j % 400 == 0: # 判断闰年:被4整除但不被100整除,或被400整除
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 - 2 #加上日期差
else:
for i in range(mon - 1):
date += list2[i] # 平年月份按list2相加,得月份相差天数
days = date + day - 2 #加上日期差
total = days + years #总天数差
ji = total % 7 # 参考日期是2018年1月1号是星期一
# 由于"ji=0"时,输出的结果是"星期0",因此对"ji"进行了判断,使"ji=0"时输出的结果为"星期7"
if ji != 0:
if (ji+5)%7 != 0:
print(year, '年', mon, '月', day, '日', '是星期', (ji+5)%7 )
else:
print(year, '年', mon, '月', day, '日', '是星期', 7)
else:
print(year, '年', mon, '月', day, '日', '是星期', 5)
# 输入的年份小于2018年的判断过程如下: day( 年 + 月 + 日 )% 7
else:
for j in range(year + 1, 1980):
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 + 1
total = days + years
ji = total % 7
if ji != 0:
# 余数为1是星期7,余数为2是星期6...,总结规律为8-ji
if 5 - ji > 0:
print(year, '年', mon, '月', day, '日', '是星期', 5 - ji)
elif 5 - ji < 0:
print(year, '年', mon, '月', day, '日', '是星期', 12 - ji)
else:
print(year, '年', mon, '月', day, '日', '是星期', 5)
C++ 的方法:https://www.nowcoder.com/discuss/426591?type=post&order=time&pos=&page=1&channel=1001&source_id=search_post