Python简易自动售货机程序无限循环问题排查求助
解决自动售货机无限循环问题
嘿,我看了你的代码,立马就找到问题根源了——你只在函数最开头获取了一次item的输入,进入while循环后就再也没更新过它的值!这就导致不管是输入错误还是购买成功,程序都会一直拿着同一个item值反复循环,自然会不停重复打印消息啦。
咱们一步步来修复这个问题:
核心问题拆解
- 输入只获取一次:你把
item = int(input(...))放在了while循环外面,循环内部没有重新触发输入操作,item的值永远不会改变,循环条件item != -1会一直成立,直接陷入无限循环。 - 余额无法持续更新:
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
相关产品推荐
相关产品推荐

