如何为用户raw_input()创建全局命令;访问库存清单?

时间:2014-08-16 17:42:26

标签: python python-2.7

我并不是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)

1 个答案:

答案 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())

通常,您会希望迭代一个广告资源只会产生项目,而不会产生带有项目名称和项目的元组。