学习用Python制作万年历,轻松掌握日期计算!_python 年历-程序员宅基地

技术标签: 学习  python  microsoft  Python  

更多资料获取

个人网站:ipengtao.com


制作一个万年历是一个有趣的Python项目,它可以让您查看任何年份的日历并获得特定日期的信息。本文将深入探讨如何使用Python创建一个简单的万年历,包括基本日历生成、用户交互和特定日期信息的提取。

导入所需模块

在开始之前,需要导入Python中的calendar模块来帮助生成日历。

以下是导入模块的示例代码:

import calendar

基本日历生成

创建一个函数,用于生成指定年份和月份的日历。

以下是一个示例函数:

def generate_calendar(year, month):
    cal = calendar.month(year, month)
    return cal

在上面的示例中,使用calendar.month()函数生成特定年份和月份的日历,并将结果作为字符串返回。

用户交互

编写代码,以便用户可以输入要查看的年份和月份,然后显示相应的日历。

以下是一个用户交互的示例:

def main():
    year = int(input("请输入年份:"))
    month = int(input("请输入月份:"))
    
    cal = generate_calendar(year, month)
    
    print(f"{
      year}{
      month}月的日历:")
    print(cal)

if __name__ == "__main__":
    main()

在上面的示例中,使用input()函数来获取用户输入的年份和月份,然后调用generate_calendar()函数生成并显示日历。

特定日期信息提取

除了基本的日历生成,还可以编写代码来提取特定日期的信息,例如某一天是星期几。

以下是一个示例函数:

def get_day_of_week(year, month, day):
    weekday = calendar.weekday(year, month, day)
    days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
    return days[weekday]

在上面的示例中,使用calendar.weekday()函数来获取指定日期的星期几,并返回相应的文本。

添加节假日信息

一个完整的万年历应该包括节假日信息,以便用户可以方便地查看特殊日期。可以创建一个字典,将节假日和日期关联起来,并在日历中标记这些日期。

以下是一个示例:

holidays = {
    
    "元旦": (1, 1),
    "春节": (2, 12),
    "清明节": (4, 4),
    # 添加更多的节假日信息
}

def generate_calendar_with_holidays(year, month):
    cal = calendar.month(year, month)
    
    for holiday, (holiday_month, holiday_day) in holidays.items():
        cal = cal.replace(
            f"{
      year}{
      holiday_month}{
      holiday_day}日",
            f"{
      year}{
      holiday_month}{
      holiday_day}日({
      holiday})"
        )
    
    return cal

在上面的示例中,创建了一个名为holidays的字典,将不同节假日与其日期关联起来。然后,在generate_calendar_with_holidays()函数中遍历字典,并将节假日信息添加到生成的日历中。

显示特定日期的信息

除了查看日历之外,用户还可能希望获取特定日期的详细信息。可以添加一个函数,根据用户提供的日期,返回该日期的星期几和是否是节假日。

以下是一个示例函数:

def get_date_info(year, month, day):
    date = f"{
      year}-{
      month:02d}-{
      day:02d}"
    weekday = get_day_of_week(year, month, day)
    
    is_holiday = False
    for (holiday_month, holiday_day) in holidays.values():
        if month == holiday_month and day == holiday_day:
            is_holiday = True
    
    if is_holiday:
        return f"{
      date}{
      weekday},是节假日"
    else:
        return f"{
      date}{
      weekday},不是节假日"

在上面的示例中,首先获取日期的星期几,然后检查它是否是节假日,并返回相应的信息。

完整示例

以下是一个完整示例,包括上述的所有功能:

import calendar

holidays = {
    
    "元旦": (1, 1),
    "春节": (2, 12),
    "清明节": (4, 4),
    # 添加更多的节假日信息
}

def generate_calendar(year, month):
    cal = calendar.month(year, month)
    
    for holiday, (holiday_month, holiday_day) in holidays.items():
        cal = cal.replace(
            f"{
      year}{
      holiday_month}{
      holiday_day}日",
            f"{
      year}{
      holiday_month}{
      holiday_day}日({
      holiday})"
        )
    
    return cal

def get_day_of_week(year, month, day):
    weekday = calendar.weekday(year, month, day)
    days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
    return days[weekday]

def get_date_info(year, month, day):
    date = f"{
      year}-{
      month:02d}-{
      day:02d}"
    weekday = get_day_of_week(year, month, day)
    
    is_holiday = False
    for (holiday_month, holiday_day) in holidays.values():
        if month == holiday_month and day == holiday_day:
            is_holiday = True
    
    if is_holiday:
        return f"{
      date}{
      weekday},是节假日"
    else:
        return f"{
      date}{
      weekday},不是节假日"

def main():
    year = int(input("请输入年份:"))
    month = int(input("请输入月份:"))
    
    cal = generate_calendar(year, month)
    
    print(f"{
      year}{
      month}月的日历:")
    print(cal)
    
    day = int(input("请输入要查询的日期(日):"))
    info = get_date_info(year, month, day)
    print(info)

if __name__ == "__main__":
    main()

通过这个完整示例,用户可以查看指定年份和月份的日历,了解特定日期的详细信息,包括星期几和是否是节假日。

总结

制作一个Python万年历是一个有趣而实用的项目,本文提供了详细的步骤和示例代码,帮助大家了解如何创建一个简单的万年历应用。在这个项目中,可以学到如何使用Python的calendar模块生成日历,如何实现用户交互,以及如何添加特殊日期和节假日信息。

首先,导入了calendar模块,这个模块提供了强大的日期和时间处理功能。然后,创建了一个函数来生成指定年份和月份的日历,并在用户交互中使用它来显示日历。

为了让万年历更丰富和实用,还添加了特殊日期和节假日信息的功能。通过创建一个字典,将不同的节假日与其日期关联起来,并将它们标记在生成的日历中。这让用户可以方便地查看重要的日期。最后,还实现了一个函数,允许用户查询特定日期的详细信息,包括星期几和是否是节假日。这个功能使得万年历更加实用,可以帮助用户更好地了解日期的含义。

通过完成这个项目,不仅学到了如何处理日期和日历,还提高了Python编程技能。制作一个Python万年历不仅有趣,还有实际价值,可以在日常生活中提供有用的日期信息。


Python学习路线

在这里插入图片描述

更多资料获取

个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuShiJingZuo/article/details/135244130

智能推荐

freeRTOS:基于(队列+线程)的日志系统设计_freertos日志-程序员宅基地

文章浏览阅读667次。故障排查与调试:嵌入式系统通常运行在资源有限的环境中,故障排查和调试变得尤为复杂。日志系统可以记录系统在运行过程中的各种操作、状态和事件信息,方便开发人员追踪和定位问题所在。通过分析日志,可以快速找到故障源,并进行相应的修复和调试。系统性能优化:嵌入式系统的资源有限,因此性能优化尤为关键。日志系统可以记录系统运行过程中的性能指标,如任务执行时间、资源利用率等。通过分析这些日志,可以发现系统性能瓶颈,进行性能优化和资源管理,提高系统的响应速度和资源利用效率。_freertos日志

剑指offer的python解_python剑指offer题解-程序员宅基地

文章浏览阅读86次。笔记笔记笔记-待更新二维数组中查找题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数思路从最右一列往下查找,效率比直接遍历高代码# -*- coding:utf-8 -*-class Solution:# array 二维列表def Find(self, ..._res=[] for i in b: res.append(min_1(a,i)) tem = np.array(res).min() return t

android:layout_weight="1",Android:LinearLayout布局中Layout_weight的深刻理解-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏3次。首先看一下LinearLayout布局中Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重。很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间。看下面代码:android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_par..._"android:layout_weight=\"1"

jenkins war包_Jenkins在Java web项目CI/CD中的简单应用-程序员宅基地

文章浏览阅读94次。JenkinsJenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.主要介绍使用Jenkins..._jenkins构建javaweb应用指定war包名

课节6: 图神经网络进阶模型之 ERNIESage 上-程序员宅基地

文章浏览阅读779次。ERNIESage是用在NLP的一个模型。UniMP是标签传播的一个模型https://aistudio.baidu.com/aistudio/education/lessonvideo/937035ERNIESageERNIE结构其实就是多层的transformer。_erniesage

微信小程序入门教程 --(保姆级)-程序员宅基地

文章浏览阅读6.7k次,点赞24次,收藏92次。小程序入门保姆级教程_微信小程序入门

随便推点

git_git.w-程序员宅基地

文章浏览阅读101次。1、环境安装Git最新版下载地址:https://gitforwindows.org/TortoiseGit,Git客户端,32/64位最新版及对应的语言包下载地址:https://tortoisegit.org/download/安装的方法,一直下一步就行,具体做法省略。2、配置 1、首先,请选定一个存放Git项目的目录,这样管理方便. 如:D:\te..._git.w

OnTriggerEnter事件、以及触发碰撞、刚体碰撞研究尝试-程序员宅基地

文章浏览阅读6.9k次,点赞4次,收藏7次。一、触发碰撞和刚体碰撞共性:碰撞双方都需要加碰撞器组件,至少有一个添加了刚体组件rigidbody;异同:触发碰撞需要在 碰撞器勾选is trigger选项,刚体碰撞需要使用物理动力模式(isKinematic 选项不能勾选)二、OnTriggerEnter事件执行特点;OnTriggerEnter事件不是每帧调用的,它是基于RigidBody物理碰撞后调用的,不管事件所在的脚本是..._ontriggerenter

腾讯云服务器网站搭建教程(太简单了)_腾讯云建站-程序员宅基地

文章浏览阅读5.6k次,点赞8次,收藏62次。已经有了腾讯云服务器如何搭建网站?腾讯云服务器网以腾讯云服务器,借助宝塔面板搭建Web环境,然后使用WordPress博客程序搭建网站,大致分为三步,首先购买腾讯云服务器,然后在腾讯云服务器上部署宝塔面板,最后在宝塔面板上安装WordPress程序。_腾讯云建站

WebSphere MQ6.0 for redhat4.6 setup_websphere mq6.0下载-程序员宅基地

文章浏览阅读956次。WebSphere MQ6.0 for redhat4.6 setup分类: WebSphere 2010-04-12 14:45650人阅读 评论(0)收藏举报websphereredhatmanageribm消息中间件statisticsWebsphere MQ是IBM的商业消息中间件(Commercial Messaging Middlewar_websphere mq6.0下载

Spring——Bean 的生命周期_spring bean的生命周期-程序员宅基地

文章浏览阅读1.1w次,点赞11次,收藏49次。目录一、Bean 的生命周期二、代码演示三、主要步骤简述一、Bean 的生命周期  对于普通的 Java 对象,new 的时候会去创建对象,而当它没有任何引用的时候则被垃圾回收机制回收。相较于前者,由Spring IoC 容器托管的对象,它们的生命周期完全由容器控制。Spring 中每个 Bean 的生命周期如下:对于 ApplicationContext 容器,当容器启动结束后,实例化所有的 Bean。设置对象属性,即依赖注入,动态将依赖关系注入到对象中。紧接着,Spring 会检测该对象_spring bean的生命周期

matlab_matlab fat-程序员宅基地

文章浏览阅读94次。为什么logical==0?_matlab fat