Python日期验证代码中含or的if条件判断不生效问题求解
问题根因
你写出错的if语句不符合Python的逻辑运算规则:if month == 4 or 6 or 11: 会被Python解析为 if (month == 4) or (6) or (11):,按照Python的布尔判定规则,所有非0整数的布尔值都为True,因此6和11的判定结果永远为真,整个if条件无论month取什么值都会成立,所以month=12时也会进入这个分支。
修复方案
两种正确的写法可选:
- 补全每个独立的相等判断
if month == 4 or month == 6 or month == 11: # 每个or两侧都是独立的布尔表达式 print(month) if day > 30: allright= False
- 使用成员判断简化代码(可读性更高)
if month in (4, 6, 11): # 判断month是否在指定的月份元组中 print(month) if day > 30: allright= False
其他可优化点
- 现有2月校验逻辑没有处理闰年,比如2000年是闰年,2月有29天,你的代码会误判
29/02/2000为无效日期,可以补充闰年判断规则完善逻辑。 - 现有正则匹配规则存在漏洞,会匹配到
00/00/0000这类无效日期,可调整正则规则收紧匹配范围。 - 你的
allright变量在for循环内部初始化,打印逻辑放在了for循环外,最终只会输出最后一个匹配到的有效日期,如果你需要输出所有符合规则的日期,要把打印逻辑缩进放到for循环内部。
内容的提问来源于stack exchange,提问作者TonyMaharony
相关产品推荐
相关产品推荐

