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

Python计算数字位数程序出现while循环无限打印问题如何解决

无限循环的原因

  • 你代码中的while interger != 0循环内,仅8位数字的判断分支加了break跳出逻辑,其余所有分支执行完打印操作后,既没有修改interger的取值,也没有终止循环的逻辑,只要输入的数字不是0也不是8位,循环条件永远成立,就会无限重复打印对应结果。
  • 你的判断逻辑还存在几处漏洞:
    • 10、100这类边界值没有覆盖到,会落到最后一个elif interger == interger的分支,而这个分支的判断条件永远为真,属于无效逻辑
    • 没有兼容0、负数、超过8位的数字的计算场景
    • 变量名interger存在拼写错误,正确拼写为integer(不影响运行,仅代码规范问题)

修复方案

方案1:兼容原有写法的修复版本

仅补充跳出逻辑和边界处理,保留你原来的分支判断写法:

integer = int(input('请输入一个整数,程序会计算它的位数:'))

# 处理负数
if integer < 0:
    integer = abs(integer)

while True:
    if integer == 0:
        print('1位')
        break
    elif 0 < integer < 10:
        print ('1位')
        break
    elif 9 < integer < 100:
        print('2位')
        break
    elif 99 < integer < 1000:
        print('3位')
        break
    elif 999 < integer < 10000:
        print('4位') 
        break
    elif 9999 < integer < 100000:
        print('5位')
        break
    elif 99999 < integer < 1000000:
        print ('6位')
        break
    elif 999999 < integer < 10000000:
        print('7位')
        break
    elif 9999999 < integer < 100000000:
        print('8位')
        break
    else:
        print(f'{len(str(integer))}位')
        break

方案2:通用while循环实现(不限数字位数)

不需要写大量分支判断,适配所有整数的位数计算:

integer = int(input('请输入一个整数,程序会计算它的位数:'))
temp = abs(integer)
count = 0

# 单独处理0的场景
if temp == 0:
    count = 1
else:
    while temp > 0:
        count += 1
        # 每次去掉整数的最后一位
        temp = temp // 10

print(f'该数字共有{count}位')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:24:04