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

Python简易自动售货机程序无限循环问题排查求助

解决自动售货机无限循环问题

嘿,我看了你的代码,立马就找到问题根源了——你只在函数最开头获取了一次item的输入,进入while循环后就再也没更新过它的值!这就导致不管是输入错误还是购买成功,程序都会一直拿着同一个item值反复循环,自然会不停重复打印消息啦。

咱们一步步来修复这个问题:

核心问题拆解

  1. 输入只获取一次:你把item = int(input(...))放在了while循环外面,循环内部没有重新触发输入操作,item的值永远不会改变,循环条件item != -1会一直成立,直接陷入无限循环。
  2. 余额无法持续更新:balance = 20每次调用函数都会重置,用户多次购买后余额不会累积变化,这也是个影响体验的小问题。

修改后的代码示例

def vending_process():
    # 余额只初始化一次,保证多次购买后能持续更新
    balance = 20
    vending_items = {
        'Haribo':20, 
        'Hershey':21, 
        'Lays':22, 
        'Cheetos':23, 
        'Pepsi':24, 
        'Dew':25, 
        'Rockstar':26, 
        'Monster':27, 
        'Starbucks':28, 
        'Nescafe':29
    }
    # 把输入放到循环内部,每次循环都让用户重新选择
    while True:
        item = int(input("Choose your item from the vending machine! Choose -1 to abort: "))
        if item == -1:
            print("Aborting purchase.")
            exit(0)
        # 检查输入的编号是否存在
        if item not in vending_items.values():
            print("No such entry! Please try again.")
            continue
        # 根据编号匹配商品和价格(这里可以扩展其他商品的定价)
        item_price = 0
        item_name = ""
        for name, code in vending_items.items():
            if code == item:
                item_name = name
                if name == 'Haribo':
                    item_price = 1.5
                # 后续可以在这里添加其他商品的价格,比如Hershey: 2.0之类的
                break
        # 更新余额并给出反馈
        balance -= item_price
        print(f'You bought {item_name} for {item_price:.2f}! Your balance is {balance:.2f}')

关键调整说明

  • 把输入移到循环内:确保每次循环都会触发新的输入,用户操作后能回到选择提示,不会卡在同一个值上循环。
  • 余额初始化放在循环外:让余额在多次购买过程中持续更新,符合真实售货机的逻辑。
  • 优化商品匹配逻辑:通过遍历字典把编号对应到商品名称,后续扩展其他商品价格会更方便。
  • 改用while True:替代原来的while item != -1,逻辑更清晰,退出条件直接在循环内部处理。

这样修改后,程序就能正常回到选择提示,余额也会正确累积更新啦!

内容的提问来源于stack exchange,提问作者Jos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:19:04