7、 编写函数,传入任意一个日期的年、月、日三个数据,输出此日期是该年的第几天?注意:闰年的 2 月是 28 天,非闰年的 2 月是 29 天,要首先判断该年是否是闰年。
时间: 2024-05-19 11:11:15 浏览: 83
def is_leap(year):
"""
判断是否是闰年,是返回True,否则返回False
"""
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
else:
return False
def day_of_year(year, month, day):
"""
输入年月日,输出是该年的第几天
"""
days_of_month = [0,31,28,31,30,31,30,31,31,30,31,30,31] #每个月的天数
if is_leap(year): # 如果是闰年,2月份有29天
days_of_month[2] = 29
days = sum(days_of_month[:month]) + day # 计算前几个月的天数和当月的天数
return days
# 测试
print(day_of_year(2021,1,1)) # 1
print(day_of_year(2021,12,31)) # 365
print(day_of_year(2020,12,31)) # 366 (闰年)
相关问题
编写函数,如果公元 1800 年 1 月 1 日是星期三,那么,传入任意一个日期的年、月、日,输出此 日期是星期几?
```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
```
其中,第一行计算了年份间的天数,第二行计算了月份间的天数,第三行判断了闰年的情况,最后一行加上了当月的天数。
用python 编写函数,如果公元 1800 年1月1日是星期三,那么,传入任意一个日期的年、月、日,输出此 日期是星期几?
```python
import datetime
def get_weekday(year, month, day):
"""
获取给定日期是星期几
:param year: 年份
:param month: 月份
:param day: 日份
:return: 星期几(0-6 分别代表周日到周六)
"""
base_date = datetime.date(1800, 1, 1)
target_date = datetime.date(year, month, day)
delta = (target_date - base_date).days
weekday = (3 + delta) % 7 # 1800年1月1日是星期三
return weekday
```
调用示例:
```python
weekday = get_weekday(2022, 12, 25)
print(weekday) # 输出 0,代表是周日
```