Python使用除法判断数字是否为回文数 逻辑正确却运行出错求助
Python数字回文校验代码错误修复
现存错误点
- 参数覆盖问题:
isPalindrome方法本身已设计为接收入参x,但方法内第一行用input获取的用户输入直接覆盖了入参,导致函数传参失效,不符合你设定的「用户输入作为函数调用参数」的实现需求 - 原始值丢失问题:循环过程中你不断对
x做整除10的操作,循环结束后x的值已经被修改为0,此时拿已经变为0的x和反转后的rev做比较,逻辑完全错误,需要提前存储原始输入值用于最终对比 - 缩进错误:实例化
Solution类、调用校验方法的代码错误缩进在类定义内部,不属于全局可执行代码,运行时会直接报错 - 未定义变量调用:全局作用域下没有提前定义变量
x,就直接调用sol.isPalindrome(x),会触发变量未定义的报错
修正后代码
class Solution: def isPalindrome(self, x: int) -> bool: # 提前保存原始输入值,避免循环修改后丢失 original_x = x rev = 0 # 负数直接不是回文,提前判断减少计算 if x < 0: return False while x > 0: temp = x % 10 rev = rev * 10 + temp x = x // 10 return original_x == rev # 类定义外执行实例化、传参调用 if __name__ == "__main__": # 把用户输入作为参数传入函数 input_num = int(input("Enter The number")) sol = Solution() a = sol.isPalindrome(input_num) print(a)
核心改动说明
- 移除了函数内部的
input逻辑,把用户输入移到函数调用前,符合「用户输入作为函数参数」的要求 - 新增
original_x变量存储原始输入值,循环结束后用原始值和反转结果做对比 - 调整了实例化、调用逻辑的缩进,移到类定义外部,作为全局执行代码
- 新增负数提前判断逻辑,覆盖负数校验的边缘场景
- 简化了返回值写法,直接返回
original_x == rev的布尔结果,无需额外的if判断
内容的提问来源于stack exchange,提问作者user10465448
相关产品推荐
相关产品推荐

