Python自动售货机程序输入正确金额仍打印错误提示如何修复
问题根因
你遇到的输出异常是两处核心逻辑错误共同导致的:
- 面值校验逻辑完全错误:
if money != mo是将总支付金额和整个硬币面值列表做比较,这个判断条件永远为真,所以无论输入什么都会触发无效金额提示 - 校验规则不符合业务逻辑:你需要校验的是每次投入的单个硬币面值是否合规,而不是总支付金额是否等于单枚硬币面值,总金额是多枚硬币累加的结果,本来就不可能和单枚面值列表匹配
修复后完整代码
prod = ["咖啡", "加奶咖啡", "巧克力", "加奶巧克力"] cost = [1.5, 1.8, 2.1, 2.4] mo = [0.1, 0.2, 0.5, 1, 2, 5, 10] item_number = len(prod) print("\n请选择商品:") for number in range(item_number): print(number + 1, prod[number], '{0:.2f}€'.format(cost[number])) print("0 退出") choice = int(input("请输入1-4选择对应商品,输入0退出程序:")) - 1 if choice < item_number and choice >= 0: print("您需要支付总额:{0:.2f}€".format(cost[choice])) else: print("正在退出程序") exit(0) total_money = 0 # 循环投币直到金额足够 while total_money < cost[choice]: need_pay = cost[choice] - total_money insert = float(input("请投入硬币,还需支付{:.2f}€:".format(need_pay))) # 先校验单枚硬币面值是否合规 if insert not in mo: print("无效面值,请投入合规硬币:0.1 / 0.2 / 0.5 / 1 / 2 / 5 / 10 €") continue total_money += insert # 金额足够后直接计算找零 change = total_money - cost[choice] print("找零:{0:.2f}€".format(change))
修改说明
- 新增了单枚硬币的面值校验逻辑,每次投币先验证面值,不合规直接提示重试,不计入总支付金额
- 删掉了原代码中错误的总金额和面值列表比较的逻辑
- 优化了投币交互流程,符合自动售货机的常规操作逻辑
- 补充了中文提示内容,匹配翻译需求
内容的提问来源于stack exchange,提问作者user4466931
相关产品推荐
相关产品推荐

