【发布时间】:2021-01-21 00:03:22
【问题描述】:
我正在开发一款基于文本的小型游戏,但在从列表中删除元素时遇到了问题。
这是一个运行代码,会引发错误ValueError: list.remove(x): x not in the list,但我不明白为什么。
LVL = 'lvl'
DAMAGE = 'damage'
Items = {
'Sword':{
LVL : 1,
DAMAGE : 5,
},
'Wand':{
LVL : 1,
DAMAGE : 3,
},
}
class player():
def __init__(self):
self.inventory = []
class item():
def __init__(self, name: str, **kwarg):
self.name = name
self.dmg = kwarg.get(DAMAGE)
self.lvl = kwarg.get(LVL)
def __str__(self):
return self.name
if __name__ == "__main__":
user = player()
for i in Items.keys():
it = item(i, **Items[i])
user.inventory.append(it)
# check user's inventory
print('Inventory after append items :')
for i in user.inventory:
print(i)
# let's say i want the user to drop items
items_name = [i for i in Items.keys()]
items_to_drop = [item(i, **Items[i]) for i in items_name]
for i in items_to_drop:
user.inventory.remove(i)
我的猜测是,即使user.inventory 中的项目与items_to_drop 中的项目相同,程序仍将其视为两个不同的变量。在这种情况下,我看不到如何执行我想要的操作,即从user.inventory 中删除项目,因为列表中包含要删除的项目(因为我不能直接循环user.inventory 对吗?)
如果这个问题之前已经回答过,我深表歉意。我已经搜索过了,但没有成功。
【问题讨论】:
-
你认为 Python 如何比较
item的两个实例? -
@timgeb 这是否意味着我必须编写代码?就像在
item类中覆盖__eq__方法一样?如果没有,我想我不知道.. -
你在正确的轨道上,自定义
__eq__!
标签: python-3.x list valueerror