关于python打印万年历的问题,如何解决?

日历程序可以打印出任何一年的日历,程序运行后输入一个年份,如输入2017年,打印2017年全年的日历。
提示:(1)注意闰年在判定
(2)求某月在最大天数
(3)求某月1号是星期几
(4)循环打印每一个月的日历

img


import calendar

year = int(input("输入一个年份:"))
if calendar.isleap(year):
    print(year, "是闰年\n")
else:
    print(year, "不是闰年\n")

for month in range(1, 13):
    days = calendar.monthrange(year, month)[1]
    weekday = calendar.weekday(year, month, 1)
    print("\n", year, "年", month, "月")
    print("Mo Tu We Th Fr Sa Su")
    for i in range(weekday):
        print("   ", end="")
    for day in range(1, days + 1):
        if day < 10:
            print(" ", end="")
        print(day, end=" ")
        if (day + weekday) % 7 == 0:
            print()
    print()


导出来后运行一次就自动关闭窗口了,有啥办法让它不关闭窗口,能继续输入年份运行

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7645676
  • 你也可以参考下这篇文章:python小程序(3)输入某年某月某日,计算这一天是这一年的第几天
  • 你还可以看下python参考手册中的 python- 定义扩展类型:已分类主题- 终结和内存释放
  • 除此之外, 这篇博客: python-根据给定的时间范围计算年、季、月、周的开始和结束日期中的 5.根据给定的起止时间段,获取时间范围内每周的开始和结束日期 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • def get_week_monday_and_sunday_by_date(date_str):
        """
        给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
        :param date_str: 如:"2020-05-01"
        :return: 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
        """
        now_time = datetime.datetime.strptime(date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
        week_start_time = now_time - datetime.timedelta(days=now_time.weekday(), hours=now_time.hour,
                                                        minutes=now_time.minute, seconds=now_time.second,
                                                        microseconds=now_time.microsecond)
        week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
        return week_start_time, week_end_time
    
    
    def get_week_start_and_end_by_date_interval(start_date_str, end_date_str):
        """
        给定时间(日期)区间,返回区间中所有的周起止时间列表
        :param start_date_str: "2020-01-31"
        :param end_date_str: "2020-05-08"
        :return: [{'2020-01-06': ['2020-01-06', '2020-01-12']}, {'2019-12-30': ['2019-12-30', '2020-01-05']}, ...]
        """
        date_list = list()
        # 截止时间
        end_date = datetime.datetime.strptime(end_date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
        # 起始时间所在周 - 周一和周日
        start_week_monday, start_week_sunday = get_week_monday_and_sunday_by_date(start_date_str)
    
        # 截止时间所在周 - 周一和周日
        end_week_monday, end_week_sunday = get_week_monday_and_sunday_by_date(end_date_str)
        if end_week_monday <= end_date:
            # 结束日期 <= 给定的截止日期
            date_list.append(
                {end_week_monday.strftime('%Y-%m-%d'): [end_week_monday.strftime('%Y-%m-%d'),
                                                        end_week_sunday.strftime('%Y-%m-%d')]})
    
        count = 1
        while True:
            week_start_time = end_week_monday - datetime.timedelta(days=7 * count)  # 截止日期所在的周一,向前减7天取上一个周一
            week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)  # 前一周的周日
    
            count += 1
            if week_start_time < start_week_monday:
                break
            date_list.append(
                {week_start_time.strftime('%Y-%m-%d'): [week_start_time.strftime('%Y-%m-%d'),
                                                        week_end_time.strftime('%Y-%m-%d')]})
        return date_list[::-1]
    
    

    结果示例: ('2020-05-31','2020-08-01')

    [{'2020-05-25': ['2020-05-25', '2020-05-31']}, 
    {'2020-06-01': ['2020-06-01', '2020-06-07']},
     {'2020-06-08': ['2020-06-08', '2020-06-14']}, 
     {'2020-06-15': ['2020-06-15', '2020-06-21']}, 
     {'2020-06-22': ['2020-06-22', '2020-06-28']}, 
     {'2020-06-29': ['2020-06-29', '2020-07-05']}, 
     {'2020-07-06': ['2020-07-06', '2020-07-12']},
      {'2020-07-13': ['2020-07-13', '2020-07-19']},
       {'2020-07-20': ['2020-07-20', '2020-07-26']}, 
       {'2020-07-27': ['2020-07-27', '2020-08-02']}]
    
  • 您还可以看一下 尹成老师的Python机器学习与数据挖掘day14课程中的 3电力用户数据挖掘机器学习与深度学习对比小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以使用Python的calendar库来打印任意一年的日历。具体步骤如下:

    1. 首先导入calendar库:
    import calendar
    
    1. 输入要打印的年份,例如:
    year = 2021
    
    1. 使用calendar库的calendar函数打印整个年份的日历:
    print(calendar.calendar(year))
    

    该函数返回一个字符串,包含整个年份的日历,可以直接输出或写入文件。

    1. 如果需要打印某个月份的日历,可以使用calendar库的month函数:
    month = 4
    print(calendar.month(year, month))
    

    该函数返回一个字符串,包含指定月份的日历。

    需要注意以下细节:

    • 闰年的判定可以使用calendar库的isleap函数:calendar.isleap(year)
    • 每个月的最大天数可以使用calendar库的monthrange函数:calendar.monthrange(year, month)
    • 每个月1号是星期几可以使用calendar库的weekday函数:calendar.weekday(year, month, day=1)

    示例代码:

    import calendar
    def print_calendar(year):
        """
        打印指定年份的日历
        :param year: 要打印的年份
        """
        print(calendar.calendar(year))
    
    def print_month_calendar(year, month):
        """
        打印指定月份的日历
        :param year: 要打印的年份
        :param month: 要打印的月份
        """
        print(calendar.month(year, month))
    
    # 调用函数示例
    print_calendar(2021) # 打印2021年的日历
    print_month_calendar(2021, 4) # 打印2021年4月的日历
    

    需要输入的参数:年份和月份。

    输出的结果:打印整个年份或指定月份的日历。

    样例输入和输出:

    • 输入年份2021,输出整个2021年的日历
    • 输入年份2021和月份4,输出2021年4月的日历