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

Python闰年判断if else逻辑异常仅非闰年生效如何修复

代码问题修复方案

核心问题原因

你的代码闰年分支失效主要是以下几个逻辑错误导致的:

  • 闰年标识的字符串大小写不统一:普通闰年(能被4整除但不能被100整除)赋值的是Leap Year(Y大写),世纪闰年赋值的是Leap year(y小写),后续判断只匹配小写y的Leap year,导致普通闰年完全无法命中分支。
  • 月份校验逻辑完全失效:首先条件month<1 and month>12不可能成立,其次该判断放在年份判断的elif分支中,只要年份符合前面的任意条件,永远不会执行到月份校验。
  • 月份天数判断语法错误:month==1 or 3 or 5...的写法等价于(month==1) or True or True...,非0数字的布尔值永远为真,导致不管输入什么月份都会判定为31天。
  • 无效输入没有中断执行:输入非法年份/月份后,打印提示后依然会执行后续天数判断逻辑,可能触发类型错误。

修复后完整代码

month = int(input("Enter a month: "))
year = int(input("Enter a year: "))

# 先做输入有效性校验
if year < 0 or month < 1 or month > 12:
    print("Please enter a valid number")
else:
    # 判断是否为闰年,统一用布尔值做标识,避免字符串大小写问题
    is_leap = False
    if year % 4 == 0:
        if year % 100 != 0:
            is_leap = True
        else:
            if year % 400 == 0:
                is_leap = True

    # 计算当月天数
    if month == 2:
        days = 29 if is_leap else 28
    elif month in (1,3,5,7,8,10,12):
        days = 31
    else:
        days = 30
    print(f"Number of days:{days}")

关键修改说明

  • 优先做输入有效性校验,只要年份小于0或者月份不在1-12范围内,直接提示错误,不执行后续逻辑
  • 用布尔类型is_leap标识是否为闰年,替代字符串标识,完全避免大小写不匹配的问题
  • 月份判断改用in关键字匹配月份元组,语法正确逻辑清晰
  • 简化了天数判断的冗余逻辑,合并了闰年/非闰年的公共判断分支

内容的提问来源于stack exchange,提问作者user219412894

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:36:03