编写程序,输入年份,打印出该年的年历(12 个月的),如下图所示。 提示:先求出输入年份的 1 月 1 日是星期几,然后通过循环打印出每个月的日历, 注意大小月和闰月问题
时间: 2023-06-14 19:05:37 浏览: 37
以下是 Python 代码实现:
```python
import calendar
year = int(input("请输入年份:"))
weekday = calendar.weekday(year, 1, 1) # 求出该年1月1日是星期几
# 打印年历
for month in range(1, 13):
# 打印月份和星期
print("{0}月".format(month).center(20, "-"))
print("日 一 二 三 四 五 六")
# 打印月份日期
days = calendar.monthrange(year, month)[1] # 求出该月的天数
for i in range(weekday):
print(" ", end="")
for day in range(1, days + 1):
print("{0:2d} ".format(day), end="")
weekday += 1
if weekday == 7:
print()
weekday = 0
if weekday != 0:
print()
print()
```
运行程序后,输入年份即可打印出该年的年历。例如,输入 2022 年,输出结果如下:
```
请输入年份:2022
--------1月---------
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
--------2月---------
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
--------3月---------
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
--------4月---------
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
--------5月---------
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
--------6月---------
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
--------7月---------
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
--------8月---------
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
--------9月---------
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
--------10月--------
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
--------11月--------
日 一 二 三 四 五 六
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
--------12月--------
日 一 二 三 四 五 六
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
```