Python3反转整数函数返回inf问题:Python2可正常运行
问题分析与解决:Python3中反转整数返回inf的原因
哦,这个坑很多人刚从Python2转Python3的时候都会踩!核心问题出在除法运算符/的行为差异上。
先看你代码里的关键行:n /= 10
- 在Python2中,当两个整数执行
/除法时,结果会自动取整(地板除),比如123/10得到12,12/10得到1,1/10得到0,这时候while n>0的循环就会终止,所以函数能正常返回反转后的整数。 - 但在Python3里,
/运算符不管操作数是不是整数,返回的都是浮点数:123/10得到12.3,12.3/10得到1.23,1.23/10得到0.123……这个数值会无限趋近于0,但永远不会等于0,导致while n>0的循环永远不会停止!
循环一直跑的话,r会不断执行r *=10和r +=n%10,数值会越来越大,直到超出Python浮点数的最大表示范围,最终就返回了inf(无穷大)。
解决方法
把代码里的除法改成Python3的整数地板除,也就是用//运算符替换/,修改后的代码如下:
a = 123 def rev(n): r = 0 while n > 0: r *= 10 r += n % 10 n = n // 10 # 这里改用整数除法,确保n始终是整数 return r print(rev(a)) # 现在会正常输出321
这样每次n都会被取整为整数,当n变成0时循环就会终止,函数就能正确返回反转后的整数了。
另外补充个小细节:这个函数目前只处理正整数,如果要支持负数,你可以先把负数转正,反转后再添上负号,不过这是额外的优化点啦~
内容的提问来源于stack exchange,提问作者Md Ariful islam Protik
相关产品推荐
相关产品推荐

