You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义digits函数用while n>0统计位数返回异常值的原因

问题原因分析

核心原因:误用了浮点数除法

Python3中/运算符执行的是浮点数除法,而非截断小数的整数除法,你代码中每次执行n = n / 10都会得到浮点数结果,而非整数。
比如输入25时,循环执行过程是:

  • 第一次循环:count=1,n=25/10=2.5,仍满足n>0
  • 第二次循环:count=2,n=2.5/10=0.25,仍满足n>0
  • 后续循环:n会变成0.025、0.0025……这类始终大于0的极小浮点数,循环不会终止,直到浮点数精度耗尽,n最终变为0.0才会退出,此时count已经累计到300多的异常值。

为什么改n>1看起来能正常运行?

当循环条件改成n>1时,n降到1以下就会退出:
还是拿25举例,第二次循环后n=0.25,不满足n>1直接退出,count刚好是2,和预期结果一致,属于歪打正着。
但这个解法存在漏洞:比如输入1时,初始n=1不满足n>1,会直接返回count=0,和预期的1位不符。

正确修复方案

把浮点数除法换成整数除法//,保留原来的n>0循环条件即可:

def digits(n):
    count = 0
    if n == 0:
      return 1
    while (n > 0):
        count += 1
        n = n // 10
    return count

这个写法可以正确覆盖所有正整数的位数统计场景。

内容的提问来源于stack exchange,提问作者Annie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:51:01