本篇为Python万年历查询器实战案例,专为Python新手打造!教你用Python内置calendar模块从零实现一个多功能万年历查询器,支持年历/月历查询、星期查询、日期合法性判断,新手能快速掌握日期处理技能,轻松搞定日常日期查询需求!

图1:Python万年历查询器核心功能与操作流程
一、Python万年历查询器功能说明
这是Python零基础入门最实用的日期工具项目,基于Python官方内置的calendar模块开发,无需额外安装第三方库,支持多维度日期查询,操作简单,适合日常使用和新手练手,帮你彻底告别手动翻日历的繁琐:
- 查询指定年份的完整年历(12个月日历,格式清晰)
- 查询指定年/月的完整月历,周一开头,符合中文使用习惯
- 查询指定年/月/日是星期几,精准到具体中文星期
- 自动判断日期合法性(如2月30日、13月等非法日期)
- 处理非数字输入,自动提示错误,程序不崩溃
- 支持连续查询,输入0可随时退出程序
二、Python万年历查询器完整代码实现
以下为完整可运行代码,注释覆盖核心逻辑,零基础小白可直接复制到PyCharm/VS Code运行:
# Python万年历查询器,基于内置calendar模块
import calendar# 设置日历显示为中文星期(周一开头)
calendar.setfirstweekday(calendar.MONDAY)def check_date(year, month=1, day=1):
“””判断日期是否合法”””
try:
# 若月份/日期超出范围,会抛出异常
calendar.monthrange(year, month)
if day > calendar.monthrange(year, month)[1]:
return False
return True
except:
return Falsedef show_year_calendar(year):
“””显示指定年份的年历”””
print(f”\n {year} 年 万年历”)
print(“=” * 60)
print(calendar.calendar(year))def show_month_calendar(year, month):
“””显示指定年/月的月历”””
print(f”\n {year} 年 {month} 月 日历”)
print(“=” * 30)
print(calendar.month(year, month))def show_weekday(year, month, day):
“””查询指定日期是星期几”””
weekday_dict = {0:”星期一”,1:”星期二”,2:”星期三”,3:”星期四”,
4:”星期五”,5:”星期六”,6:”星期日”}
# 获取星期序号(0=周一,6=周日)
weekday = calendar.weekday(year, month, day)
print(f”\n {year} 年 {month} 月 {day} 日 是 {weekday_dict[weekday]}”)def main():
“””主程序,展示菜单并处理用户操作”””
print(“=” * 40)
print(” Python万年历查询器 v1.0″)
print(” 功能:1-查年历 2-查月历 3-查星期 0-退出”)
print(” 内置模块开发,无需额外安装库”)
print(“=” * 40)while True:
try:
choice = int(input(“\n请输入操作序号:”))
if choice == 0:
print(” 感谢使用,程序退出!”)
break
elif choice == 1:
year = int(input(“请输入要查询的年份:”))
show_year_calendar(year)
elif choice == 2:
year = int(input(“请输入要查询的年份:”))
month = int(input(“请输入要查询的月份:”))
if 1 <= month <= 12:
show_month_calendar(year, month)
else:
print(” 月份错误!请输入1-12之间的数字”)
elif choice == 3:
year = int(input(“请输入年份:”))
month = int(input(“请输入月份:”))
day = int(input(“请输入日期:”))
if check_date(year, month, day):
show_weekday(year, month, day)
else:
print(” 日期错误!请输入合法的年/月/日”)
else:
print(” 操作序号错误!请输入0-3之间的数字”)
except ValueError:
print(” 输入错误!请输入有效的数字”)# 程序入口
if __name__ == “__main__”:
main()
import calendar# 设置日历显示为中文星期(周一开头)
calendar.setfirstweekday(calendar.MONDAY)def check_date(year, month=1, day=1):
“””判断日期是否合法”””
try:
# 若月份/日期超出范围,会抛出异常
calendar.monthrange(year, month)
if day > calendar.monthrange(year, month)[1]:
return False
return True
except:
return Falsedef show_year_calendar(year):
“””显示指定年份的年历”””
print(f”\n {year} 年 万年历”)
print(“=” * 60)
print(calendar.calendar(year))def show_month_calendar(year, month):
“””显示指定年/月的月历”””
print(f”\n {year} 年 {month} 月 日历”)
print(“=” * 30)
print(calendar.month(year, month))def show_weekday(year, month, day):
“””查询指定日期是星期几”””
weekday_dict = {0:”星期一”,1:”星期二”,2:”星期三”,3:”星期四”,
4:”星期五”,5:”星期六”,6:”星期日”}
# 获取星期序号(0=周一,6=周日)
weekday = calendar.weekday(year, month, day)
print(f”\n {year} 年 {month} 月 {day} 日 是 {weekday_dict[weekday]}”)def main():
“””主程序,展示菜单并处理用户操作”””
print(“=” * 40)
print(” Python万年历查询器 v1.0″)
print(” 功能:1-查年历 2-查月历 3-查星期 0-退出”)
print(” 内置模块开发,无需额外安装库”)
print(“=” * 40)while True:
try:
choice = int(input(“\n请输入操作序号:”))
if choice == 0:
print(” 感谢使用,程序退出!”)
break
elif choice == 1:
year = int(input(“请输入要查询的年份:”))
show_year_calendar(year)
elif choice == 2:
year = int(input(“请输入要查询的年份:”))
month = int(input(“请输入要查询的月份:”))
if 1 <= month <= 12:
show_month_calendar(year, month)
else:
print(” 月份错误!请输入1-12之间的数字”)
elif choice == 3:
year = int(input(“请输入年份:”))
month = int(input(“请输入月份:”))
day = int(input(“请输入日期:”))
if check_date(year, month, day):
show_weekday(year, month, day)
else:
print(” 日期错误!请输入合法的年/月/日”)
else:
print(” 操作序号错误!请输入0-3之间的数字”)
except ValueError:
print(” 输入错误!请输入有效的数字”)# 程序入口
if __name__ == “__main__”:
main()

图2:Python万年历查询器控制台运行效果演示
三、Python万年历查询器运行效果演示
运行代码后,在控制台输入操作序号,即可完成年历/月历/星期查询,以下为完整运行效果:
========================================
Python万年历查询器 v1.0
功能:1-查年历 2-查月历 3-查星期 0-退出
内置模块开发,无需额外安装库
========================================
请输入操作序号:2
请输入要查询的年份:2026
请输入要查询的月份:2
2026 年 2 月 日历
==============================
February 2026
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28请输入操作序号:3
请输入年份:2026
请输入月份:2
请输入日期:10
2026 年 2 月 10 日 是 星期二请输入操作序号:0
感谢使用,程序退出!
Python万年历查询器 v1.0
功能:1-查年历 2-查月历 3-查星期 0-退出
内置模块开发,无需额外安装库
========================================
请输入操作序号:2
请输入要查询的年份:2026
请输入要查询的月份:2
2026 年 2 月 日历
==============================
February 2026
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28请输入操作序号:3
请输入年份:2026
请输入月份:2
请输入日期:10
2026 年 2 月 10 日 是 星期二请输入操作序号:0
感谢使用,程序退出!
四、Python万年历查询器核心知识点总结
- calendar模块:Python内置日历模块,calendar()/month()直接生成日历,无需手动实现
- setfirstweekday():设置日历每周的起始天,实现中文日历的「周一开头」
- monthrange():获取指定月份的天数和起始星期,用于判断日期合法性
- weekday():获取指定日期的星期序号,实现星期查询功能
- 字典映射:将星期序号转为中文星期,提升用户体验
- 异常处理:捕获非法年/月的异常,实现日期合法性判断

图3:Python万年历查询器日常应用场景展示
五、Python万年历查询器扩展功能建议
掌握基础版Python万年历查询器后,可尝试扩展以下功能,进一步提升工具实用性:
- 农历查询功能:集成lunardate第三方库,实现公历/农历互查,扩展日历功能
- 日期计算功能:计算两个日期之间的天数差,支持工作日/自然日两种模式
- 图形化界面(GUI):用Tkinter打造可视化日历界面,适合非技术人员使用
- 节假日查询功能:内置法定节假日,查询指定日期是否为节假日
- 批量日期查询:批量查询多个日期的星期,适合批量处理日期需求
六、Python万年历查询器常见问题解答
在使用工具的过程中,新手常遇到以下问题,这里统一解答:
- Q:日历默认周日开头,怎么改成周一开头?
A:用calendar.setfirstweekday(calendar.MONDAY)即可设置周一开头,符合中文使用习惯 - Q:如何判断日期是否合法?
A:用calendar.monthrange()获取当月天数,对比输入日期,超出则为非法日期 - Q:支持查询历史年份吗?比如1900年?
A:完全支持,calendar模块支持任意合法年份的日历查询,无年份限制 - Q:可以批量查询多个日期吗?
A:基础版支持单个日期查询,可扩展为批量查询,适合批量处理日期需求
小贴士:
1. 本文是「Python实战案例10篇技术专栏」的第06篇,聚焦Python日期处理核心知识点
2. calendar模块是Python官方内置模块,无需额外安装库,打开即用,兼容性强
3. 多动手修改代码、扩展功能,是提升Python编程能力的最佳方式
4. 后续可学习更多Python日期处理工具,轻松搞定各类日期需求
1. 本文是「Python实战案例10篇技术专栏」的第06篇,聚焦Python日期处理核心知识点
2. calendar模块是Python官方内置模块,无需额外安装库,打开即用,兼容性强
3. 多动手修改代码、扩展功能,是提升Python编程能力的最佳方式
4. 后续可学习更多Python日期处理工具,轻松搞定各类日期需求
本文是Python实战案例10篇技术专栏的第06篇,专为Python新手打造的Python万年历查询器教程。
更多Python官方学习资源,可参考Python calendar模块官方文档,这是Python日期处理的权威参考依据。
本文为「小白编程笔记」原创 · Python零基础入门实战系列 | 未经授权,禁止转载
文章标签:
Python万年历查询器
Python日期处理
Python实战案例
calendar模块
Python入门项目
Python万年历查询器
Python日期处理
Python实战案例
calendar模块
Python入门项目

渝公网安备50022402001073号
Pingback: Python实战案例:10篇经典技术专栏全目录 - 小白 编程 笔记
Pingback: Python 实战案例:10 篇经典技术专栏全目录,零基础从入门到实战 - 小白 编程 笔记