“List”对象不可调用,基于文本的RPG的语法错误

时间:2013-07-19 04:29:26

标签: python

我在生成随机对象方面遇到了问题(在这种情况下,这是一种通过觅食发现的随机草药)。这是函数的代码:

def collectPlants(self):
    if self.state == 'normal':
        print"%s spends an hour looking for medicinal plants." % self.name
        if random.choice([0,1]):
            foundHerb = random.choice(herb_dict)
            print "You find some %s." % foundHerb
            return random.choice(herb_dict)
        else: print"%s doesn't find anything useful." % self.name

和dict块:

herb_dict = [
    ("Aloe Vera", Player().health == Player().health + 2),
    ("Cannabis", Player().state == 'high'),
    ("Ergot", Player().state == 'tripping')
]

对于秘密的例子,我们深表歉意。 Herb也是一个有三个参数的类:(自我,名字,效果)。

当调用collectPlants函数时,如何从dict生成随机草药?

2 个答案:

答案 0 :(得分:0)

random.choice是一种方法,因此如果您想要调用它,则需要使用()而不是[]。另外,要访问列表中的元素,您需要使用[]而不是()

对于您的情况,将return random.choice[herb_dict("")]替换为符合您需要的return random.choice(herb_dict),它会随机返回herb_dict中的元素。

但我认为你方法的逻辑存在一些问题。

print "You find some %s." % herb.name
player.hasHerb()

以上两个陈述永远不会被执行。

此外,您可以使用if random.choice([0, 1]):代替if random.randint(0,1) == 1:

答案 1 :(得分:0)

你必须使用如下所示,因为random.choice需要一个序列来选择一个随机值。

random.choice(herb_dict)

使用上面的结果,你会得到一个元组并且可以使用[index]来访问元素,例如访问其中的第一个元素,使用random.choice(herb_dict)[0]