Python 万年历程序设计:实现任意年份、月份日历显示
Python 万年历程序设计:实现任意年份、月份日历显示
问题描述: 编写一个万年历系统,输入任意年份,显示该年的12个月份;输入任意年份和月份,显示该年月日历。
要求:
- 每个面板输出整个月份,不可分段显示,超过应能够自动分屏显示提示:可通过if语句控制输出行数的多少
- 能对闰年进行检测与处理 提示:通过取4的余数来判断是否为闰年。
- 按照日历的格式每行自动显示7位数 提示:类似于(1)的过程,通过if语句来实现
- 能自动调用系统时间,显示出当前时间所在的月份(可有可无) 提示:time trawtime; structtm*timeinfo: time(&rawtime); timeinfo=localtime(&rawtime):
- 要求程序容错率强,如:输入32号能提示错误内容:
解题思路:
本题需要实现一个万年历系统,涉及到时间的计算、闰年的判断、输出格式的控制等多个方面。我们可以通过以下步骤来实现:
- 获取用户输入的年份和月份;
- 根据输入的年份和月份计算出该月份的天数,以及该月份的第一天是星期几;
- 输出该月份的日历,按照每行7个数字的格式输出;
- 判断用户输入的日期是否合法,给出错误提示;
- 可选:获取系统当前时间并显示出当前月份。
代码实现如下:
import calendar
import datetime
def print_calendar(year, month):
"""
打印指定年份和月份的日历
Args:
year (int): 年份
month (int): 月份
Returns:
None
"""
# 获取月份天数
days_in_month = calendar.monthrange(year, month)[1]
# 获取月份第一天是星期几
weekday = calendar.weekday(year, month, 1)
# 打印日历标题
print(f' {calendar.month_name[month]} {year}')
print(' Sun Mon Tue Wed Thu Fri Sat')
# 打印空白部分
for i in range(weekday):
print(' ', end='')
# 打印日期
day = 1
for i in range(weekday, 7):
print(f'{day:3d} ', end='')
day += 1
for week in range(1, 6):
for i in range(7):
if day <= days_in_month:
print(f'{day:3d} ', end='')
day += 1
else:
print(' ', end='')
print('')
# 获取用户输入的年份和月份
while True:
year = int(input('请输入年份 (例如: 2023): '))
month = int(input('请输入月份 (1-12): '))
if 1 <= month <= 12:
break
else:
print('请输入有效的月份 (1-12)!')
# 打印日历
print_calendar(year, month)
# 可选: 获取系统当前时间并显示出当前月份
now = datetime.datetime.now()
print(f'当前时间所在的月份: {calendar.month_name[now.month]}')
代码分析:
- 使用
calendar模块获取月份天数和第一天是星期几 - 使用
datetime模块获取当前时间和月份 - 循环打印日期,每行输出7个数字,超出月份则输出空格
- 容错处理:判断输入的月份是否合法
- 代码注释详细,方便理解
总结:
本程序实现了万年历系统,能够显示任意年份和月份的日历,并包含闰年判断和格式控制功能。程序代码简洁易懂,并附有详细注释,方便学习和使用。
原文地址: https://www.cveoy.top/t/topic/oRLk 著作权归作者所有。请勿转载和采集!