2016-08-14 98 views
0

我是新来的蟒蛇,我试图做一个简单的“游戏” 我试图让怪物的健康,但只有名字出现。 我可以做(random.choice(list(Monster.health.keys())))(random.choice(list(Monster.health.Values())))将名字和健康都存储在一个变量中,但我使用random,所以名字可能会说'哥布林',但健康可能会说'50',这是错误的。使用随机获取字典的关键和价值

我怎么能存储在random_mon_name_health变量和访问这两个“钥匙”和“价值”

class Monster: 
    health = {'goblin': 15, 'giant': 50} 


class EncounterM(Monster): 
    random_mon_name_health = '' 

    def basic_monster(self): 
     import random 
     self.random_mon_name_health = (random.choice(list(Monster.health.keys()))) 

    def test(self): 
     print(self.random_mon_name_health) 


beta_user = EncounterM() 
beta_user.basic_monster() 
beta_user.test() 
# This is only a section of the game that I'm having trouble with 
+0

您可以使用'.items()',它是包含键和值的元组的“列表”或“迭代器”。 – MSeifert

+0

如果你得到一个随机密钥和一个随机值,那么它们是不相关的,只要得到一个随机密钥,那么相关的值将是'Monster.health [k]',其中'k'是被选择的密钥。 –

+0

这并不相关,但您应该花时间学习Python如何使用类。它们不完全像Java类。 –

回答

0

你只需要调用choice一次,像这样:

class Monster: 
    health = {'goblin': 15, 'giant': 50} 

class EncounterM(Monster): 
    def __init__(self): 
     self.random_mon_name = '' 
     self.random_mon_health = 0 

    def basic_monster(self): 
     import random 
     self.random_mon_name, self.random_mon_health = \ 
      random.choice(list(Monster.health.items())) 

    def test(self): 
     print(self.random_mon_name, self.random_mon_health) 


beta_user = EncounterM() 
beta_user.basic_monster() 
beta_user.test() 
+0

in python 3'dict.items()'返回一个'ItemsView'而不是'list',所以你需要在将它传递给'random.choice'之前将它转换为列表,所以它看起来像:'random。选项(列表(Monster.health.items()))'是前向兼容的。 –

+0

@ TadhgMcDonald-Jensen好点。我假设Python 2,但没有真正的理由。我将编辑答案以包含演员阵容,以便能够在任何一个中工作。 – Feneric

0

如果你想要将这两个关键值都存储在self.random_mon_name_health处,您可以将您的方法更改为类似的方法,它将返回一个包含怪物名称及其相关健康状况的元组。

def basic_monster(self): 
    import random 
    random_key = (random.choice(list(Monster.health.keys()))) 
    self.random_mon_name_health = random_key, Monster.health[random_key]