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

如何实现列表元素数量扣除?完善Python库存的remove函数

问题描述

我该如何完成remove函数?我尝试替换列表中的物品数量,但不清楚具体实现方法。

我的代码:

def additem():
    items.append(str(input("item name:")))
    amount.append(int(input("item amount:")))

def showitem():
    for i in range(len(items)):
        print("-",items[i],"*",amount[i])

def removeitem():
    inp=input("item name:")
    am=int(input("item amount:"))


items=[]
amount=[]

while True:
    print("<ad>  <remove> <show>  <exit>")
    i=input()
    if i=="add":
        additem()
    elif i=="remove":
        removeitem()
    elif i=="show":
        showitem()
    elif i=="exit":
        print("Inventory closed")
        break
    else:
        print("command not found!")
实现思路与代码修改

你的代码用两个平行列表存储物品名和数量,removeitem需要完成以下核心逻辑:

  • 定位目标物品在列表中的位置
  • 根据输入数量判断是减少库存还是删除物品记录
  • 处理物品不存在、库存不足的异常情况

修改后的removeitem函数如下:

def removeitem():
    inp = input("item name:")
    am = int(input("item amount:"))
    
    # 查找目标物品的索引
    if inp in items:
        idx = items.index(inp)
        current_amount = amount[idx]
        if current_amount == am:
            # 数量匹配,直接删除该物品记录
            del items[idx]
            del amount[idx]
            print(f"已移除全部{inp}")
        elif current_amount > am:
            # 库存充足,减少对应数量
            amount[idx] = current_amount - am
            print(f"已移除{am}个{inp},剩余{amount[idx]}个")
        else:
            print(f"{inp}库存不足,当前仅{current_amount}个")
    else:
        print(f"未找到物品{inp}")

另外注意主循环的提示文字有拼写错误,将<ad>改为<add>:

print("<add>  <remove> <show>  <exit>")
额外优化建议

如果你的库存允许重复添加同一物品,上述代码仅会处理第一个匹配项。若想简化逻辑、避免重复记录,建议改用字典存储(键为物品名,值为数量):

# 替换原有列表为字典
inventory = {}

def additem():
    name = input("item name:")
    am = int(input("item amount:"))
    if name in inventory:
        inventory[name] += am
    else:
        inventory[name] = am

def showitem():
    for name, am in inventory.items():
        print(f"- {name} * {am}")

def removeitem():
    name = input("item name:")
    am = int(input("item amount:"))
    if name in inventory:
        if inventory[name] == am:
            del inventory[name]
            print(f"已移除全部{name}")
        elif inventory[name] > am:
            inventory[name] -= am
            print(f"已移除{am}个{name},剩余{inventory[name]}个")
        else:
            print(f"{name}库存不足,当前仅{inventory[name]}个")
    else:
        print(f"未找到物品{name}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:05:26