Python 嵌套列表结构下实现糖果库存扣减自定义函数求助
核心问题定位与修正方案
当前代码无法达成预期效果,主要存在3个逻辑断层:
- 未匹配目标商品:遍历库存列表时,没有将用户输入的糖果名称、价格和列表项做校验,不管用户选什么商品,都会直接对遍历到的第一个库存项做库存判断,完全定位不到用户要购买的Cookie
- 未真正修改原列表库存:代码中定义的
iamount是指向库存值的临时局部变量,对这个变量做减法不会改动原lst_s嵌套列表里存储的库存值 - 执行流程错位:库存判断、结果打印的逻辑没有按「匹配目标商品→校验库存→扣减更新→输出结果」的顺序执行,会出现循环内重复打印、无匹配就误判的问题
修正后的可运行代码
lst_s = [ ["Smarties", 5, 37], ["Cookie", 8, 80], ["Fizzies", 4, 50], ["Chocolate bar", 4, 25] ] def update_quantity(): name = str(input("Enter name of confectionary: ")).strip() price = int(input("Enter price: ")) amount = int(input("enter quantity customer wants to buy: ")) # 标记是否找到匹配的商品 matched = False for item in lst_s: # 先匹配用户输入的名称和价格,定位目标商品 if item[0] == name and item[1] == price: matched = True current_stock = item[2] # 校验库存是否充足 if amount > current_stock: print("Sorry not enough in store to sell") else: # 直接给原列表的库存位置赋值,完成真实扣减 item[2] = current_stock - amount break # 找到匹配商品后终止循环,不需要继续遍历剩下的项 # 遍历完成后统一输出最终库存状态 if matched: print("Updated inventory: ", lst_s) else: print("The confectionary you entered does not exist in store")
关键修改说明
- 新增商品匹配逻辑:遍历库存时校验当前项的名称(
item[0])、价格(item[1])和用户输入值是否一致,匹配成功后立刻终止循环,避免无意义遍历;同时修正类型不匹配问题——将用户输入的价格从字符串转为整数,和列表中存储的整数价格做等值判断,解决字符串与整数永远匹配失败的问题 - 修正库存修改逻辑:把原来修改临时变量
iamount的操作,改为直接给原列表项的索引2位置赋值(item[2] = current_stock - amount),利用Python可变列表的引用特性,真正完成嵌套列表的数值更新 - 调整执行流程:将结果打印逻辑移到循环外,仅在完成匹配、扣减或库存不足判断后统一输出,避免循环内重复打印
- 补充边界逻辑:增加匹配标记,若遍历完所有项都没找到对应商品,会提示用户商品不存在
内容的提问来源于stack exchange,提问作者cgl345
相关产品推荐
相关产品推荐

