限定最大四位输入年份,分1582年前后新/旧规则计算闰年。
(笔记模板由python脚本于2024年10月30日 09:38:43创建,本篇笔记适合喜欢python,有python基础编程能力的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室

本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/143356740
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ 最pythonic的闰年判定
- 1、涉及知识点及“代码技巧”
- 2、公元纪年及闰年概念
- 3、is_leapyear“初稿”
- 5、if “0”值的书写形式
- 6、优雅的pythonic代码
- 7、“四位有效年份”限定
- 8、“闰年判定”完整源码(Python)
◆ 最pythonic的闰年判定
1、涉及知识点及“代码技巧”
【知识点
】
-
1582年以前,闰年规则是“四年一闰”
-
1582年及以后新规:四年一闰,但整除100不可以整除400,不是闰年
-
公元元年是1年,它的上一年是-1(没有公元0年)
【代码技巧
】
-
三元操作:简洁代码
-
链式比较:简化判断逻辑
-
逻辑非:
not
反转bool
结果
【代码支行效果
】
截屏图片
qpython
Zero Linux
2、公元纪年及闰年概念
资料截屏
3、is_leapyear“初稿”
is_leapyear
“初稿”
def is_leapyear(year: int) -> bool:
''' 闰年判定
1、1582年以前,闰年规则是“四年一闰”
2、1582年及以后新规:四年一闰,但整除100不可以整除400,不是闰年。
3、公元从公元1年开始,即公元元年(1)的上一年是-1(公元前1年)。公元没有0后!
'''
if not year: # 排除0
raise ValueError(f"{' 年份没有0年,公元元年是1年 ':-^30}")
elif year < 1582: # 老规
if not year%4:
return True
else: # 新规
if not year%400 or year%4 and year%100:
return True
代码逻辑有“误区”
与ai探讨闰年逻辑
5、if “0”值的书写形式
与ai探讨“0”值if的代码书写形式
6、优雅的pythonic代码
is_leapyear
优雅pythonic修正
def is_leapyear(year: int) -> bool:
''' 闰年判定
1、1582年以前,闰年规则是“四年一闰”
2、1582年及以后新规:四年一闰,但整除100不可以整除400,不是闰年。
'''
return year%4 == 0 if year < 1582 else year%400 == 0 or (year%4 == 0 and year%100 != 0)
三元操作
优雅地用三元操作把闰年判定逻辑条件,“串联”浓缩为一条python语句,极尽优雅简洁,易读易解。😎😎
7、“四位有效年份”限定
代码
def main() -> None:
try:
year = int(input(f"\n\n{' 闰年判定 ':=^38}\n\n\n\n{'(-9999至9999之间为有效年份)':-^30}\n\n{'输入年份:':>14}").strip()) # 接收键盘输入并转int
# 本程序只处理四位年份,因为四位年份已经涵盖“真实世界”纪年实用。另公元元年是1年,它的上一年是-1
#if year < -9999 or year == 0 or year > 9999:
if not (-10000 < year < 9999 and year != 0):
print(f"\n\n{' 无效年份 ':-^38}\n\n\n\n{' 程序已退出!':=^36}\n")
return
except ValueError as e:
print(f"{' 年份错误 ':-^38}\n\n异常提示:{e}\n\n\n\n{' 程序已退出!':=^36}\n")
两种表达
a、if year < -9999 or year == 0 or year > 9999
b、if not (-10000 < year < 9999 and year != 0)
-
详细解析
-
总结
8、“闰年判定”完整源码(Python)
代码运行效果
ai学伴的肯定
完整脚本
(源码较长,点此跳过源码)
#!/usr/bin/env python3
all = ['is_leapyear']
def is_leapyear(year: int) -> bool:
''' 闰年判定
1、1582年以前,闰年规则是“四年一闰”
2、1582年及以后新规:四年一闰,但整除100不可以整除400,不是闰年。
'''
return year%4 == 0 if year < 1582 else year%400 == 0 or (year%4 == 0 and year%100 != 0)
def main() -> None:
try:
year = int(input(f"\n\n{' 闰年判定 ':=^38}\n\n\n\n{'(-9999至9999之间为有效年份)':-^32}\n\n{'输入年份:':>14}").strip()) # 接收键盘输入并转int
# 本程序只处理四位年份,因为四位年份已经涵盖“真实世界”纪年实用。另公元元年是1年,它的上一年是-1
#if year < -9999 or year == 0 or year > 9999:
if not (-10000 < year < 9999 and year != 0):
print(f"\n\n{' 无效年份 ':-^38}\n\n\n\n{' 程序已退出!':=^36}\n")
return
except ValueError as e:
print(f"{' 年份错误 ':-^38}\n\n异常提示:{e}\n\n\n\n{' 程序已退出!':=^36}\n")
# 输出
leapyear = '闰' if is_leapyear(year) else '平'
print(f"\n\n{'':-^42}\n\n{'':>14}{year:0>4}年,是{leapyear}年。\n\n{'':=^42}\n")
if __name__ == '__main__':
main()
上一篇: 与ai聊我的代码架构(以包目录结构模块,以*.py脚本收纳模块)
下一篇:
我的HOT博:
本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有
7
7
7篇。
-
001
标题:让QQ群昵称色变的神奇代码
(浏览阅读 5.9w )
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
点赞:25 收藏:86 评论:17
摘要:让QQ昵称色变的神奇代码。
首发:2022-01-18 19:15:08
最后编辑:2022-01-20 07:56:47 -
002
标题:Python列表(list)反序(降序)的7种实现方式
(浏览阅读 1.1w )
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
点赞:8 收藏:35 评论:8
摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
首发:2022-12-11 23:54:15
最后编辑:2023-03-20 18:13:55 -
003
标题:pandas 数据类型之 DataFrame
(浏览阅读 9.7k )
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
点赞:7 收藏:36
摘要:pandas 数据类型之 DataFrame_panda dataframe。
首发:2022-05-01 13:20:17
最后编辑:2022-05-08 08:46:13 -
004
标题:个人信息提取(字符串)
(浏览阅读 8.2k )
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
点赞:2 收藏:15
摘要:个人信息提取(字符串)_个人信息提取python。
首发:2022-04-18 11:07:12
最后编辑:2022-04-20 13:17:54 -
005
标题:Python字符串居中显示
(浏览阅读 7.6k )
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
评论:1 -
006
标题:罗马数字转换器|罗马数字生成器
(浏览阅读 7.5k )
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
摘要:罗马数字转换器|生成器。
首发:2022-01-19 23:26:42
最后编辑:2022-01-21 18:37:46 -
007
标题:回车符、换行符和回车换行符
(浏览阅读 6.0k )
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
点赞:2 收藏:3
摘要:回车符、换行符和回车换行符_命令行回车符。
首发:2022-02-24 13:10:02
最后编辑:2022-02-25 20:07:40
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)

精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文: