打印万年历(3.7)。程序运行后输入一个年份,如2017年,则打印出2017全年的日历
时间: 2024-03-06 07:47:44 浏览: 72
输入一个年份,打印该年份的日历
4星 · 用户满意度95%
好的,以下是使用 Python 实现的代码:
```python
def is_leap_year(year):
"""判断是否为闰年"""
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
def get_days_in_month(year, month):
"""获取某个月的天数"""
if month in {1, 3, 5, 7, 8, 10, 12}:
return 31
elif month in {4, 6, 9, 11}:
return 30
elif is_leap_year(year):
return 29
else:
return 28
def get_weekday(year, month, day):
"""获取某一天是星期几"""
if month == 1 or month == 2:
year -= 1
month += 12
c = year // 100
y = year % 100
week = (c // 4 - 2 * c + y + y // 4 + 13 * (month + 1) // 5 + day - 1) % 7
return week if week != 0 else 7
def display_calendar(year):
"""显示某一年的日历"""
for month in range(1, 13):
print(f"{' ' * 20}{year}年{month}月")
print("日 一 二 三 四 五 六")
first_day_week = get_weekday(year, month, 1)
month_days = get_days_in_month(year, month)
calendar_list = [" " for _ in range(first_day_week)]
for day in range(1, month_days + 1):
calendar_list.append(f"{day:2d}")
if len(calendar_list) % 7 == 0:
calendar_list.append("\n")
if calendar_list[-1] != "\n":
calendar_list.append("\n")
print("".join(calendar_list))
# 测试代码
year = int(input("请输入年份:"))
display_calendar(year)
```
代码解释:
`is_leap_year(year)` 函数用于判断一个年份是否为闰年,如果是闰年则返回 `True`,否则返回 `False`。根据闰年的定义,能整除4但不能整除100的年份是闰年,能整除400的年份也是闰年。
`get_days_in_month(year, month)` 函数用于获取某个月的天数,输入参数为年份和月份,返回该月的天数。根据每月的天数和闰年的情况进行判断。
`get_weekday(year, month, day)` 函数用于获取某一天是星期几,输入参数为年份、月份和日期,返回星期几的数字,其中1表示星期一,2表示星期二,以此类推,7表示星期日。该函数采用蔡勒公式计算,详见代码注释。
`display_calendar(year)` 函数用于显示某一年的日历,输入参数为年份,输出该年的日历。根据每个月的起始星期数和天数,构建一个列表,用于输出日历。
最后,获取用户输入的年份,调用 `display_calendar(year)` 函数显示该年的日历。
阅读全文