Python闰年判断程序问题排查:我的代码是否存在漏洞?
你的闰年判断代码问题分析
首先明确闰年的标准规则:
- 能被4整除,但不能被100整除 → 是闰年
- 能被400整除 → 是闰年
满足以上任意一个条件的年份即为闰年。
你的代码存在的问题
你的代码虽然在多数常见测试用例下能得到正确结果,但写法极不规范,逻辑表达晦涩难懂:
if year % 4 == 0 and (year % 100 == 0 and year % 400) == 0:
核心问题出在(year % 100 == 0 and year % 400) == 0这部分:
- 你没有显式写出
year % 400 == 0,而是直接用余数结果参与运算。这依赖Python中“0等价于False、非零整数等价于True”的隐式特性,可读性极差,其他人很难一眼理解你的逻辑意图。 - 整个条件的逻辑绕了不必要的弯,虽然结果巧合符合规则,但这种写法非常容易在后续修改时出错,完全不符合代码可读性的基本要求。
正确的写法
把逻辑拆解开,用直白的方式表达闰年规则,可读性和可维护性都会大幅提升:
year = int(input()) if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print(f"{year} is a leap year.") else: print(f"{year} is not a leap year.")
关键测试用例验证
- 2004(能被4整除,不能被100整除)→ 输出闰年,正确
- 1900(能被4和100整除,但不能被400整除)→ 输出非闰年,正确
- 2000(能被400整除)→ 输出闰年,正确
- 2023(不能被4整除)→ 输出非闰年,正确
内容的提问来源于stack exchange,提问作者Sanchit Saxena
相关产品推荐
相关产品推荐

