Python 万年历程序设计:实现任意年份、月份日历显示

问题描述: 编写一个万年历系统,输入任意年份,显示该年的12个月份;输入任意年份和月份,显示该年月日历。

要求:

  • 每个面板输出整个月份,不可分段显示,超过应能够自动分屏显示提示:可通过if语句控制输出行数的多少
  • 能对闰年进行检测与处理 提示:通过取4的余数来判断是否为闰年。
  • 按照日历的格式每行自动显示7位数 提示:类似于(1)的过程,通过if语句来实现
  • 能自动调用系统时间,显示出当前时间所在的月份(可有可无) 提示:time trawtime; structtm*timeinfo: time(&rawtime); timeinfo=localtime(&rawtime):
  • 要求程序容错率强,如:输入32号能提示错误内容:

解题思路:

本题需要实现一个万年历系统,涉及到时间的计算、闰年的判断、输出格式的控制等多个方面。我们可以通过以下步骤来实现:

  1. 获取用户输入的年份和月份;
  2. 根据输入的年份和月份计算出该月份的天数,以及该月份的第一天是星期几;
  3. 输出该月份的日历,按照每行7个数字的格式输出;
  4. 判断用户输入的日期是否合法,给出错误提示;
  5. 可选:获取系统当前时间并显示出当前月份。

代码实现如下:

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个数字,超出月份则输出空格
  • 容错处理:判断输入的月份是否合法
  • 代码注释详细,方便理解

总结:

本程序实现了万年历系统,能够显示任意年份和月份的日历,并包含闰年判断和格式控制功能。程序代码简洁易懂,并附有详细注释,方便学习和使用。

Python 万年历程序设计:实现任意年份、月份日历显示

原文地址: https://www.cveoy.top/t/topic/oRLk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录