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

Python数字立方和校验程序:输出异常及输入0无法终止问题排查

数字立方和校验程序的bug修复

问题原因拆解

  1. 输出始终相同:sum_of_cubes函数里的return sum写在了for循环内部,导致循环刚跑第一次就直接返回第一个数字的立方值,不管输入多长的数字,结果都只会是第一位数字的立方,自然输出永远不对。
  2. 输入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:05:33