2013-07-19 58 views
-1

我在生成一個隨機對象時遇到了問題(仍然),在這種情況下是通過覓食找到的隨機草本。下面是該函數的代碼:「列表」對象不可調用,基於文本的RPG的語法錯誤

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 

和字典塊:

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

很抱歉的祕密例子。草本也是一個有三個參數的類:(自我,名字,效果)。

當collectPlants函數被調用時,如何從字典中生成隨機草本?

回答

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:

+0

而'herb_dict'實際上不是'dict' – ninMonkey

+0

是的。我說*訪問列表中的元素*而不是*字典*。 @monkey – zhangyangyu

+0

對,我該如何執行打印行? – Velcrode

0

你必須像下面一樣使用,因爲random.choice需要一個序列來選擇一個隨機值。

random.choice(herb_dict) 

隨着上述結果,你會得到一個元組,並可以使用[索引]進入元素,例如訪問的第一個元素在,使用random.choice(herb_dict)[0]

+0

'herb_dict'是一個不是字典的列表 – zhangyangyu

+0

對不起,已編輯 – Karthikeyan