自定义isdate函数,按日期“属性”,判定字符串日期有效性。
(笔记模板由python脚本于2024年07月05日 15:28:04创建,本篇笔记适合喜欢探究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/140196650
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ 字符串格式日期判定
- 1、“re残缺版”
- 2、“升级版”
- 3、“精华版”
- 4、终极“温馨版”
◆ 字符串格式日期判定
1、“re残缺版”
借助re限定了日期格式为“YYYY-MM-DD”
的格式,但不可以限定年、月、日的数字范围,“年”可以是“0000”,“月”能输入13,“天”可以赋值99。很显然,这些都是不合理的违规日期格式。
re.findall验证python源代码
from re import findallif not findall(r'\d{4}-\d{2}-\d{2}', dateStr1) or not findall(r'\d{4}-\d{2}-\d{2}', dateStr2) or len(dateStr1)!=10 or len(dateStr1)!=10:raise ValueError(f"\n\n{f' 日期格式错误 ':-^36}\n\n\n{'':=^42}")
摒弃re
,直接按实际情形“手撕”搭组isdate
。
2、“升级版”
我发现,用re模块进行日期格式验证,不能全面覆盖错误情形,遂用最原始的方式分门别类逐条重写了。
isdate函数python源代码
def isdate(dateStr: str) -> bool:''' 判定无效日期 '''year, month, day = map(int, dateStr.split('-')) # 日期字符串拆分、转整、赋值if 999 > year or year > 9999:return # 年份输入限定:1000 < year < 10000if month < 1 or month > 12:return # 月份输入限定:1 < month < 12if day < 1:return # 号数必须大于1if month in (1, 3, 5, 7, 8, 10, 12) and day > 31:return # 大月号数不大于31if month in (4, 6, 9, 11) and day > 30:return # 小月号数不大于30if month == 2: # 2月最大天数:平年不大于28,闰年不大于29if ((year%100 and not year%4) or not year%400) and day > 29:returnelse:if day > 28:returnreturn True
找ai代劳
以下是ai编撰的“代码审查”和“代码文档”
您的
isdate
函数用于判断一个日期是否有效,已经包含了基本的日期验证逻辑。下面是对该函数的审查和建议:
代码审查
- 日期格式检查:函数首先检查日期字符串是否符合
YYYY-MM-DD
的格式。 - 年份验证:验证年份是否在1000到9999之间。
- 月份和天数验证:检查月份和天数是否在有效范围内,以及是否符合每个月份的天数限制。
- 闰年处理:对于2月,函数检查了是否为闰年,并相应地调整了天数的限制。
建议 - 代码可读性:函数中的注释可以提供更详细的说明,以便于理解和维护。
- 异常处理:考虑在函数内部抛出具体的错误信息,而不是简单地返回
False
。这样可以提供更明确的错误信息。
代码文档
isdate函数
功能:判断输入日期是否有效。
参数:
dateStr
: 日期字符串,格式为YYYY-MM-DD
。
返回值:- 如果日期有效,返回
True
;否则返回False
。
注意事项:
- 函数首先检查日期字符串的格式是否为
YYYY-MM-DD
。 - 年份必须在1000到9999之间。
- 月份必须在1到12之间。
- 天数必须符合该月的天数限制。
- 对于2月,函数考虑了闰年的情况,并相应地调整了天数的限制。
您的isdate
函数是一个很好的起点,用于验证日期的有效性。通过添加注释和更具体的错误处理,可以使代码更加健壮和易于理解。希望这些建议对您有所帮助!
3、“精华版”
听取ai学习搭子的建议,认真思索过后,对代码作了必要的修正。
修正后的isdate函数python源码
def isdate(dateStr: str) -> bool:''' 判定无效日期 '''myException = ValueError(f"{' 日期格式错误 ':-^36}") # 自定义错误类型try:year, month, day = map(int, dateStr.split('-')) # 日期字符串拆分、转整、赋值raise myExceptionif 999 > year or year > 9999:raise myException # 年份输入限定:1000 < year < 10000if month < 1 or month > 12:raise myException # 月份输入限定:1 < month < 12if day < 1:raise myException # 号数必须大于1if month in (1, 3, 5, 7, 8, 10, 12) and day > 31:raise myException # 大月号数不大于31if month in (4, 6, 9, 11) and day > 30:raise myException # 小月号数不大于30if month == 2: # 2月最大天数:平年不大于28,闰年不大于29if ((year%100 and not year%4) or not year%400) and day > 29:raise myExceptionelse:if day > 28:raise myExceptionreturn True # 如无异常,返回True
让ai重新审查和文档
以下是ai对isdate的重新审查和撰写的代码文档
您的
isdate
函数现在使用自定义的
myException
来抛出错误,这是一个很好的做法,因为它可以提供更加具体的错误信息。下面是对修正后的
isdate
函数的审查和建议:
代码审查
- 自定义错误类型:使用自定义的
myException
来抛出错误,这有助于在主函数中捕获并处理这些错误。 - 异常处理:在每个日期验证条件之后,您都使用了
raise myException
,这样当任何一个条件不满足时,都会抛出自定义的错误。 - 日期验证逻辑:函数包含了对年份、月份、天数以及特定月份天数的有效性的验证。
建议
- 代码注释:在函数中添加注释,解释每个部分的作用,尤其是自定义错误类型的使用。
- 异常处理:在主函数中,您可以捕获
myException
并给出更友好的错误提示。
代码文档
功能:判断输入日期是否有效。
参数: dateStr
: 日期字符串,格式为YYYY-MM-DD
。
返回值:如果日期有效,返回True
;否则返回False
。
注意事项:
- 函数首先检查日期字符串的格式是否为
YYYY-MM-DD
。 - 年份必须在1000到9999之间。
- 月份必须在1到12之间。
- 天数必须符合该月的天数限制。
- 对于2月,函数考虑了闰年的情况,并相应地调整了天数的限制。
- 如果日期无效,函数将抛出自定义的
myException
错误。
您的isdate
函数现在更加健壮,能够有效地验证日期的有效性。通过添加注释和更友好的错误处理,可以使代码更加易于理解和使用。希望这些建议对您有所帮助!
4、终极“温馨版”
通过与ai不断“对话”探讨,让我开窍,完善了一些逻辑,改写了数行代码,终究是完成了对isdate
的改造。目前python水准的的我,认为是“最好的代码形式”表达了我的“算法逻辑”。拉差ai学习搭子,让它代劳了一份很棒的isdate
函数的“代码文档”,方便我们理解代码渗透逻辑。
ai对话截屏图片
isdate终极“温馨版”python 源代码
def isdate(dateStr: str) -> bool:''' 判定无效日期 '''try:year, month, day = map(int, dateStr.split('-')) # 日期字符串拆分、转整、赋值except:raise ValueError(f"{' 日期格式错误 ':-^36}") # 自定义错误if 999 > year or year > 9999:raise ValueError(f"{' 年份范围错误 ':-^36}") # 年份输入限定:1000 < year < 10000if month < 1 or month > 12:raise ValueError(f"{' 月份范围错误 ':-^36}") # 月份输入限定:1 < month < 12if day < 1:raise ValueError(f"{' 号数范围错误 ':-^36}") # 号数必须大于1if month in (1, 3, 5, 7, 8, 10, 12) and day > 31:raise ValueError(f"{' 大月号数错误 ':-^36}") # 大月号数不大于31if month in (4, 6, 9, 11) and day > 30:raise ValueError(f"{' 小月号数错误 ':-^36}") # 小月号数不大于30if month == 2: # 2月最大天数:平年不大于28,闰年不大于29if ((year%100 and not year%4) or not year%400) and day > 29:raise ValueError(f"{' 闰年2月号数错误 ':-^35}")else:if day > 28:raise ValueError(f"{' 平年2号数错误 ':-^37}")return True # 如无异常,返回True
ai代劳撰写的“代码文档”
功能描述
isdate
函数用于验证输入的日期字符串是否为有效的日期。它检查日期的各个部分(年、月、日)是否在合理的范围内,并且根据月份和年份验证日期的合法性(例如,2月份的天数会根据是否为闰年而有所不同)。
参数说明
dateStr: str
:待验证的日期字符串,格式应为"YYYY-MM-DD"。
返回值
1.如果日期有效,函数返回True
。
2.如果日期无效,函数会抛出ValueError
异常,并附带相应的错误信息。
逻辑细节
1.日期解析:首先,函数尝试将输入的日期字符串按照"-"分割成年、月、日的三个部分,并转换为整数。
2.年份验证:检查年份是否在1000到9999之间。
3.月份验证:检查月份是否在1到12之间。
4.日期验证:
1). 对于大月(1、3、5、7、8、10、12月),日期应小于或等于31。
2) 对于小月(4、6、9、11月),日期应小于或等于30。
3) 对于2月,如果是闰年,日期应小于或等于29;如果是平年,日期应小于或等于28。
5.闰年判断:年份能被4整除但不能被100整除,或者能被400整除的为闰年。
异常处理
1.如果日期字符串的格式不正确,或者分割后的年、月、日无法转换为整数,函数会抛出ValueError
异常。
2.如果年份、月份或日期不在有效范围内,函数也会抛出ValueError
异常,并显示具体的错误信息。
使用示例
isdate("2024-07-04") **返回 True
isdate("2024-02-29") **返回 True,因为2024是闰年
isdate("2023-02-29") **抛出 ValueError,因为2023不是闰年
isdate("999-12-31") **抛出 ValueError,因为年份不在1000到9999之间
这份文档详细描述了isdate
函数的功能、参数、返回值和内部逻辑,以及如何处理异常情况。希望这能帮助您更好地理解和使用这个函数。
上一篇: 驱使ai学习搭子,写出一份“完美”的代码“文档”(自己把控“核心关键”,ai会把文档写得比您预想的“完美”)
下一篇:
我的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实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)