Python数字立方和校验程序:输出异常及输入0无法终止问题排查
数字立方和校验程序的bug修复
问题原因拆解
- 输出始终相同:
sum_of_cubes函数里的return sum写在了for循环内部,导致循环刚跑第一次就直接返回第一个数字的立方值,不管输入多长的数字,结果都只会是第一位数字的立方,自然输出永远不对。 - 输入0无法终止:
main函数里的while循环缩进错误,判断是否终止和输出结果的代码块都在循环外面,程序永远不会执行这些判断,只会一直卡在输入环节。
修正后的代码
def sum_of_cubes(num): sum_cube = 0 # 输入已经是字符串,不用重复转换 for digit_char in num: digit = int(digit_char) sum_cube += digit ** 3 # 遍历完所有数字后再返回总和 return sum_cube def main(): while True: number = input("输入一个最多8位的数字:") # 先判断是否输入0,直接终止程序 if number == '0': break # 校验输入合法性:必须是数字且长度不超过8位 if not number.isdigit() or len(number) > 8: print("请输入最多8位的有效数字") continue result = sum_of_cubes(number) # 把计算结果转成字符串,和原输入字符串比较 if str(result) == number: print("Yes") else: print("No") main()
关键修改说明
- 把
sum_of_cubes里的return语句移到for循环外,确保计算所有数字的立方和 - 修正main函数的缩进,将结果判断和终止逻辑都放入while循环内部
- 提前判断输入是否为0,满足条件直接终止循环
- 增加输入合法性校验,避免非数字或过长输入导致错误
- 替换内置函数名
sum为sum_cube,避免命名冲突;用digit ** 3替代三次乘法,代码更简洁
内容的提问来源于stack exchange,提问作者kora
相关产品推荐
相关产品推荐

