实现项目4打印万年历(p107),正确运行并进行注释。
时间: 2024-03-01 19:56:03 浏览: 34
好的,以下是实现项目4打印万年历的代码和注释:
```python
# 定义一个函数,根据公式计算某一年的某一个月的天数
def get_num_of_days_in_month(year, month):
if month == 2:
# 闰年的判断条件为:1、能被4整除但不能被100整除;2、能被400整除
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
return 29
else:
return 28
elif month in [4, 6, 9, 11]:
return 30
else:
return 31
# 定义一个函数,根据公式计算某一年的某一个月的第一天是星期几
def get_start_day(year, month):
# 公式:h = (q + (13*(m+1)/5) + k + (k/4) + (j/4) - 2*j) % 7
# h:0表示星期六,1表示星期天,2表示星期一,依次类推
# q:某一月的第一天是几号
# m:某一月是几月,3表示3月,4表示4月,依次类推,但1月和2月要看成上一年的13月和14月
# k:某一年的后两位数
# j:某一年的前两位数
if month == 1 or month == 2:
month += 12
year -= 1
k = year % 100
j = year // 100
q = 1
h = (q + (13*(month+1)//5) + k + (k//4) + (j//4) - 2*j) % 7
return h
# 定义一个函数,根据年份和月份打印该月的万年历
def print_month_calendar(year, month):
# 打印月份和年份
print("{0:^17}年{1:^2}月".format(year, month))
# 打印星期几的表头
print("日 一 二 三 四 五 六")
# 获取该月的第一天是星期几
start_day = get_start_day(year, month)
# 获取该月的天数
num_of_days = get_num_of_days_in_month(year, month)
# 打印该月第一天之前的空格
print(" " * start_day, end="")
# 打印该月的天数
for i in range(1, num_of_days+1):
print("{0:2d} ".format(i), end="")
# 每输出一个日期就换行
if (i + start_day) % 7 == 0:
print()
# 打印完该月的日期后换行
print()
# 定义一个函数,根据年份打印该年的万年历
def print_year_calendar(year):
# 打印年份
print("{0:^50}".format(year))
# 打印每个月份的万年历,一行显示3个月
for i in range(1, 13, 3):
# 打印3个月份的表头
print("{0:^17}{1:^17}{2:^17}".format(i, i+1, i+2))
# 打印星期几的表头
print("日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六")
# 计算出每个月第一天的星期几
start_days = [get_start_day(year, j) for j in range(i, i+3)]
# 计算出每个月的天数
num_of_days = [get_num_of_days_in_month(year, j) for j in range(i, i+3)]
# 打印3个月份的日期
for j in range(max(num_of_days)):
for k in range(3):
# 如果该月的天数大于等于j+1,则打印该天,否则打印空格
if num_of_days[k] >= j+1:
print("{0:2d} ".format(j+1), end="")
else:
print(" ", end="")
# 如果该天是该月的最后一天,就换行,否则打印空格
if start_days[k] == 6:
print(" ", end="")
elif num_of_days[k] < j+1:
print(" ", end="")
else:
print(" ", end="")
print()
# 打印完3个月的日期后换行
print()
# 主函数
if __name__ == "__main__":
year = int(input("请输入年份:"))
print_year_calendar(year)
```
这个程序中用到了一些数学公式,因此需要注意理解和掌握这些公式的计算方法。程序实现的思路比较清晰,分别定义了计算某一年某一个月的天数和第一天是星期几的函数,以及根据年份和月份打印该月的万年历和根据年份打印该年的万年历的函数。在主函数中,用户输入年份后,调用打印该年的万年历的函数即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)