Python:如何将用户输入整数与字典ID值比较?自动售货机代码异常排查
问题分析与修复方案
你的代码有两个核心问题导致无法正确匹配商品ID:
- 判断条件完全错误:你写的
choice in ["idnum"]是在检查输入的整数(比如2)是否在只包含字符串"idnum"的列表里,这显然永远不成立,自然每次都走else分支。正确的做法是拿输入的choice和每个商品字典里的idnum值做比较,也就是item["idnum"] == choice。 - 循环逻辑有误:当前代码只要第一次循环不匹配就直接
break,根本没机会检查后续的商品ID。应该遍历完所有商品,找到匹配的就输出信息并终止循环;如果遍历完都没找到,再提示无效ID。
修正后的完整代码
itemstock = [ { "idnum": 0, "name": 'Water', "price": 12, }, { "idnum": 1, "name": 'Soda', "price": 14, }, { "idnum": 2, "name": 'Juice', "price": 13, }, ] choice = int(input("Now, choose an item ID from the Menu and enter the ID: ")) # 标记是否找到匹配的ID found = False for item in itemstock: if item["idnum"] == choice: print(f"You have chosen item: {item['name']}, price: {item['price']}") found = True break # 找到后直接退出循环,不用继续遍历 if not found: print("This is not a valid ID.")
改动说明
- 新增
found变量标记是否找到匹配商品,遍历结束后根据该变量判断是否输出无效提示。 - 匹配成功时不仅输出ID,还显示商品名称和价格,更符合售货机的实际需求。
- 找到匹配项后立即
break,避免不必要的循环遍历。
内容的提问来源于stack exchange,提问作者saladbees
相关产品推荐
相关产品推荐

