Python统计输入数字位数异常:输入两位数输出325求排查
为什么统计数字位数时输入两位数会输出325?
哈哈,这个问题我刚学Python的时候也踩过一模一样的坑!咱们来一步步拆解你的代码问题出在哪:
首先看你循环里的核心代码:countnumber = countnumber/10——这里用的是普通除法/,在Python里它会把整数转换成浮点数返回,这就是导致奇怪输出的根源!
举个输入10的例子:
- 第一次循环:countnumber从10变成
10/10=1.0(浮点数),digitcount变成1 - 第二次循环:countnumber变成
1.0/10=0.1,digitcount变成2 - 这时候你以为循环该停了?但0.1是大于0的,循环会继续执行!接下来countnumber会变成0.01、0.001……直到这个浮点数小到超出双精度浮点数的表示范围,被自动处理成0的时候,循环才会终止。这个过程一共会执行325次,所以你看到输出325。
怎么修复?
把普通除法换成整数除法//,它会直接舍去小数部分,返回整数结果,这样循环就会在countnumber变成0的时候及时停止:
inputnumber = int(input()) countnumber = inputnumber digitcount = 0 while countnumber > 0: digitcount += 1 countnumber = countnumber // 10 # 用整数除法替代普通除法 print(digitcount)
额外小技巧
其实还有更简单的方式,把数字转成字符串直接统计长度:
inputnumber = int(input()) print(len(str(inputnumber)))
不过要注意,如果输入是0的话,你的原代码会输出0(因为循环不执行),而转字符串的方法会输出1,根据你的需求选择就行~
内容的提问来源于stack exchange,提问作者Naya Keto
相关产品推荐
相关产品推荐

