如何实现列表元素数量扣除?完善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
相关产品推荐
相关产品推荐

