我并不是100%确定如何提出这个问题,但这里有:
我正在通过艰难的方式学习Python,而且我在Ex上。 45,我应该自己创建一个基于文本的游戏。我不得不拉其他人的代码来制作一个库存(我将提供下面的代码),但我不能为我的生活弄清楚这一点:如果用户键入"库存"在任何raw_input()(跨多个类),我如何让它显示库存的内容?我能想到的只是一个更复杂的版本:
if raw_input() == "inventory"
print ???
但我不知道如何让游戏显示库存(???)或允许"库存"成为全球指挥...... 我知道这看起来非常非常准确,但除非我研究并试图自己找到答案,否则我不会来这里。感谢任何可以提供帮助的人,这令人沮丧!
这是我使用的库存系统:
class Item(object):
def __init__(self, name, quantity=1):
self.name = name
self.raw = name.strip().lower()
self.quantity = quantity
class Container(object):
def __init__(self, name):
self.name = name
self.inside = {}
def __iter__(self):
return iter(self.inside.items())
def __len__(self):
return len(self.inside)
def __contains__(self, item):
return item.raw in self.inside
def __getitem__(self, item):
return self.inside[item.raw]
def __setitem__(self, item, value):
self.inside[item.raw] = value
return self[item]
def add(self, item, quantity=1):
if quantity < 0:
print "ERROR."
if item in self:
self[item].quantity += quantity
else:
self[item] = item
inventory = Container("Inventory")
spare_key = Item("SPARE KEY", 1)
rock = Item("ROCK", 1)
print(spare_key in inventory)
答案 0 :(得分:2)
打印Container
类实例内容的简便方法:
print "Inventory: [" + ",".join((item[1].name for item in inventory)) + "]"
考虑更改此功能:
def __iter__(self):
return iter(self.inside.items())
到此:
def __iter__(self):
return iter(self.inside.values())
通常,您会希望迭代一个广告资源只会产生项目,而不会产生带有项目名称和项目的元组。