Python 3统计整数位数程序出现缩进错误,求解决建议
解决Python统计整数位数代码的缩进及其他问题
原代码存在的问题:
- 缩进错误:
if语句的缩进层级高于上一行的global count_e,Python要求同一代码块的缩进必须一致,这里if需与global保持相同缩进级别(建议用4个空格统一缩进)。 - 变量名不统一:开头定义的是
count=0.(还多了个无效的小数点),但函数内使用的是count_e,会导致变量未定义报错。 - 递归逻辑错误:递归调用时误用全局变量
N而非函数参数n,且用了普通除法/(会得到浮点数),无法正确触发终止条件,会导致无限递归。 - 缺少递归终止条件:没有判断
n缩小至0的情况,递归会一直执行直到栈溢出。 - 负数处理不当:直接给计数器加1的逻辑错误,负号不属于数字位数,应先取绝对值再统计。
修正后的代码:
count_e = 0 def fun(n): global count_e # 处理负数,取绝对值 n = abs(n) if n == 0: # 递归终止条件:n为0时停止调用 return count_e += 1 # 用整数除法缩小数值 fun(n // 10) N = int(input()) # 特殊处理输入0的情况(0的位数是1) if N == 0: print(1) else: fun(N) print(count_e)
修正说明:
- 统一变量名为
count_e,初始化时去掉多余小数点,避免变量未定义或类型错误。 - 统一缩进格式,确保代码块层级清晰,符合Python语法规范。
- 添加递归终止条件,当
n变为0时停止递归,避免栈溢出。 - 用
abs(n)处理负数,保证统计的是数字本身的位数。 - 使用整数除法
//替代普通除法/,确保每次递归时n都是整数,能正确缩小至0。 - 单独处理输入为0的场景,因为0的位数是1,避免递归后计数器为0的错误。
内容的提问来源于stack exchange,提问作者Ezhil
相关产品推荐
相关产品推荐

