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
相关产品推荐
相关产品推荐

