Python亚当数判断程序陷入静默死循环,无法定位错误求排查
问题根因
死循环出在reverse()函数的数值更新逻辑:
- Python3中
/运算符默认执行浮点数除法,你写的num/=10不会将num截断为整数,以输入11为例,第一次循环后num变为1.1,第二次变为0.11,第三次变为0.011……永远满足num>0的循环条件,程序会一直卡在while循环中无法退出,这也是你无法断点追踪后续代码的原因。
修复方法
将reverse()函数中的num/=10修改为整数除法num//=10即可,修改后的完整代码如下:
# Find Adam Numbers def isAdamNumber(candidate): isAdam = False rev = reverse(candidate) square = candidate * candidate revsq = rev*rev if revsq == reverse(square): isAdam = True return isAdam def reverse(num): rev=0 while num > 0: rev = rev * 10 + num%10 num //= 10 # 替换为整数除法 return rev for x in range (11,25): if isAdamNumber(x): print(x, " is an adam number\n")
运行输出
修复后程序会输出指定范围内的所有亚当数:
11 is an adam number 12 is an adam number 13 is an adam number
内容的提问来源于stack exchange,提问作者RonD
相关产品推荐
相关产品推荐

