我正在进行文本冒险并尝试让玩家从房间中拾取物品。我通过让房间有一个items
属性这是一个项目模块中的对象列表。我试图检查用户的输入是否在列表中,但即使它们是相同的,它说它不在其中。检查用户输入是否在对象列表中
world.py:
class ItemTile(MapTile):
def __init__(self, x, y):
self.items = [items.Bread(), items.Herbs()]
super().__init__(x, y)
items.py:
class Bread(Consumeable):
def __init__(self):
self.name = "Bread"
self.healing_value = 15
self.value = 20
game.py:
elif hasattr(room, "items") and 'take' in action:
player.pick_up(action)
player.py:
def pick_up(self, action):
room = world.tile_at(self.x, self.y)
item = action[5:]
item = item.title()
print(item, room.items[0])
if item in room.items:
self.inventory.append(item)
room.items.remove(item)
print('You pick up the {}'.format(item))
else:
print("You see no such thing.")
例如,如果我输入'take bread'
(只是打印,以显示它们是相同的):
Bread Bread
You see no such thing.
而且我的IDE说,耗材类下self.name
没有得到解决。
字符串“Bread”与列表中的“Bread”实例不同**,即使它们具有相同的表示形式。考虑将字符串名称映射到实际对象的字典。此外,它看起来像面包应该是'Consumeable'的*实例*,而不是*子类*。 – jonrsharpe
@jonrsharpe:你可以在上面的编辑中查看我的字典代码吗?我认为我还没有真正理解不同元素的表示。对不起:/关于子类,我正在关注一个教程 - 我并不知道更好的XD –
我建议你用你的新尝试的适当[mcve]写一个新问题,建立在下面答案的教导你的基础上。如果你改变了这个问题,你会使答案失效。 – jonrsharpe