Python报invalid literal for int() with base 10错误,求各位相乘到单一位数代码修复方案
乘法持久度计算问题修复方案
报错原因
你遇到的invalid literal for int() with base 10错误核心原因是:当乘积变为个位数时,str(sum)[1:2]会返回空字符串,int()无法将空字符串转换为整数,因此抛出异常。
除此之外你的现有代码还存在多个逻辑问题:
- 初始乘积计算只适配两位数输入,输入一位数、三位数及以上位数时计算结果完全错误,比如输入
123只会计算1*2,漏了第三位的3 - while循环条件使用
or且全程未修改n的值,n>0会永久成立,会陷入死循环 - 循环内的乘积计算仍然只取前两位,遇到三位数的乘积时会漏算后续位的数字
- 最终打印时直接将字符串和整数类型的
count做+拼接,会触发类型错误
修正后的实现代码
def persistence(n): # 输入已经是个位数,直接返回0轮 if n < 10: return 0 count = 0 current_num = n while current_num >= 10: product = 1 # 遍历当前数字的所有位做乘积 for digit in str(current_num): product *= int(digit) current_num = product count += 1 print(f"how many times: {count}") return count persistence(39)
逻辑说明
调整后的实现不再局限于两位数的计算场景,适配任意正整数输入:
- 先判断输入是否为个位数,是则直接返回0轮次
- 循环判断当前处理的数字是否为多位数,是则进入新一轮计算
- 每一轮遍历当前数字的所有位计算乘积,更新当前数值后计数+1
- 直到当前数值变为个位数时停止循环,输出最终轮次
内容的提问来源于stack exchange,提问作者1spartacus9
相关产品推荐
相关产品推荐

