Python按规则用5kg/1kg箱装料的while循环程序bug排查
问题分析
你的代码存在两个核心错误:
- 逻辑位置错误:剩余重量校验、1kg箱数量判断的逻辑放在了while循环内部,每使用1个5kg箱就会执行一次判断,还没等用完所有可用的5kg箱就提前输出结果。比如示例1的场景,第一次循环后剩余9kg物料,代码会直接判断6个1kg箱不够装9kg,提前输出-1,完全忽略还有1个可用的5kg箱,这是误输出-1的核心原因
- 分支覆盖不全:如果while循环结束后没有命中任何内部的if分支,程序不会产生任何输出,表现为随机停止运行
修正后的代码
s = int(input("Amount of 5kg boxes: ")) v = int(input("Amount of 1kg boxes: ")) k = int(input("Material in kg's: ")) def box(a, b, c): total_box = 0 # 优先用完所有可用的5kg箱 while c >= 5 and a > 0: c -= 5 a -= 1 total_box += 1 # 所有5kg箱用完后统一校验剩余重量 if c == 0: return total_box elif b >= c: return total_box + c else: return -1 print(box(s, v, k))
代码说明
- 把剩余重量的判断逻辑移到while循环外部,确保先用完所有可用的5kg箱后再统一校验
- 用return返回结果替代循环内的print,避免提前输出错误值,最后统一打印返回结果
- 覆盖所有分支场景:剩余重量为0直接返回总箱数、剩余重量不超过1kg箱可用数量返回总箱数、其余情况返回-1
内容的提问来源于stack exchange,提问作者RCWZX
相关产品推荐
相关产品推荐

