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

如何简化判断月份天数的嵌套if-else代码?

简化月份天数判断代码的几种可行方法

当然可以简化这段代码,核心思路是把重复的逻辑抽离出来,只单独处理2月的特殊情况,以下是几种常用的简化方案:

方案一:抽离2月判断,统一处理其他月份

把2月的闰年/非闰年判断单独拿出来,剩下的月份逻辑只写一次,避免重复:

if month == 2:
    return 29 if isLeapYear else 28
elif month in {4, 6, 9, 11}:
    return 30
else:
    return 31

这里用集合{4,6,9,11}代替多个or判断,代码更简洁;2月的返回值用三元表达式一键处理闰年差异,整体逻辑清晰,没有冗余代码。

方案二:用列表/字典映射固定天数

把每个月份的常规天数存到列表或字典里,仅针对2月的闰年情况做特殊处理:

列表版(更紧凑)

# 索引0对应1月,索引1对应2月,以此类推
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 2 and isLeapYear:
    return 29
return month_days[month - 1]

字典版(更直观)

month_days = {
    1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30,
    7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31
}
if month == 2 and isLeapYear:
    return 29
return month_days[month]

这种方法可读性极强,固定天数一目了然,仅需处理2月的特殊场景,非常适合维护。

方案三:单行三元表达式(不推荐,可读性差)

如果追求极致简洁,可以用嵌套三元表达式实现,但代码可读性会下降,仅适合简单场景:

return 29 if month == 2 and isLeapYear else 28 if month == 2 else 30 if month in {4, 6, 9, 11} else 31

总结

推荐使用方案一或方案二,既能消除冗余代码,又能保持良好的可读性,后续维护也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:17:19