You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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时也会进入这个分支。

修复方案

两种正确的写法可选:

  1. 补全每个独立的相等判断
if month == 4 or month == 6 or month == 11: # 每个or两侧都是独立的布尔表达式
    print(month)
    if day > 30:
        allright= False
  1. 使用成员判断简化代码(可读性更高)
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:12:01