Python回文数判断代码错误求助:输入660输出结果不符
问题分析与修正方案
你的代码存在两个关键问题,导致输入660时输出错误:
逻辑判断错误:原条件
if x < 0 and x%10 == 0)使用了and,这只会在同时满足"负数"和"末尾为0"的情况才返回False,但实际上:- 所有负数都不是回文数
- 末尾为0的数(除了0本身),首位不可能为0,因此也不是回文数
正确逻辑应该用or连接,同时排除x=0的特殊情况。
语法错误:条件末尾多了一个右括号
),会直接导致代码运行报错。
修正后的代码
class Solution: def isPalindrome(self, x: int) -> bool: # 若x为负数,或x末尾为0且x不是0,则不是回文数 if x < 0 or (x % 10 == 0 and x != 0): return False reversedNum = 0 while x > reversedNum: reversedNum = reversedNum * 10 + x % 10 x = x // 10 # 偶数位时x等于reversedNum;奇数位时x等于reversedNum//10(舍弃中间位) return x == reversedNum or x == reversedNum // 10
关键修正说明
- 调整条件为
x < 0 or (x % 10 == 0 and x != 0):覆盖了所有非回文数的前置情况,比如660会触发x%10 ==0 and x!=0,直接返回False。 - 移除了多余的右括号,修复语法错误。
- 简化了返回语句,直接返回布尔表达式结果,更简洁。
测试输入660时,代码会直接进入前置条件判断,返回False,符合预期。
内容的提问来源于stack exchange,提问作者megha jain
相关产品推荐
相关产品推荐

