You need to enable JavaScript to run this app. Python 嵌套列表结构下实现糖果库存扣减自定义函数求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 21:36:03