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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:15:08