编写函数,如果公元 1800 年 1 月 1 日是星期三,那么,传入任意一个日期的年、月、日,输出此 日期是星期几?
时间: 2024-05-08 22:17:45 浏览: 128
```python
def day_of_week(year, month, day):
# 计算公元1800年1月1日到传入日期的总天数
days = (year - 1800) * 365 + (year - 1801) // 4 - (year - 1701) // 100 + (year - 1601) // 400
days += sum([0,31,59,90,120,151,181,212,243,273,304,334][:month-1])
if month > 2 and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0):
days += 1
days += day - 1
# 计算星期几
return (days + 3) % 7
# 测试
print(day_of_week(2022, 11, 11)) # 输出 5,即星期五
```
解释:
公元1800年1月1日是星期三,所以我们可以根据传入日期与公元1800年1月1日的相差天数,来计算传入日期是星期几。
计算两个日期间相差的天数的公式为:
```
(days1 - days2) % 7
```
其中,days1是传入日期的天数,days2是公元1800年1月1日的天数(即3)。
具体计算相差天数的公式如下:
```
days = (year - 1800) * 365 + (year - 1801) // 4 - (year - 1701) // 100 + (year - 1601) // 400
days += sum([0,31,59,90,120,151,181,212,243,273,304,334][:month-1])
if month > 2 and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0):
days += 1
days += day - 1
```
其中,第一行计算了年份间的天数,第二行计算了月份间的天数,第三行判断了闰年的情况,最后一行加上了当月的天数。
阅读全文