2016-08-14 17 views
0

私はPythonを初めて使い、単純な "ゲーム"を作ろうとしています 私はモンスターの健康を得ようとしていますが、 。 (random.choice(list(Monster.health.keys())))(random.choice(list(Monster.health.Values())))は名前と健康を変数に格納することができますが、randomを使用していますので、名前に 'goblin'と表示される可能性がありますが、健康状態は「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

python 3 'dict.items()'は 'list'の代わりに' ItemsView'を返しますので、 'random.choice'に渡す前にリストにキャストする必要があります。' random。 choice(list(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] 
関連する問題