2016-07-29 10 views
0

作成しているテキストベースのRPGについては、さまざまなゲーム内の宗教、人種などの概要を示す辞書があります。例えば:1つの辞書のキーを特定し、それを使って別のdictの値を変更する

religion_Dict = {'Way of the White': {'buffs': {'intelligence': 5, 'defense': 3}, 
            'abilities': [...], 
            'description': '...'}} 

宗教のバフをプレイヤーのステータスに適用しようとすると、私の質問が続きます。私のようなものに見えるプレーヤークラスがある場合: - 辞書の内側

class Player(object)  
    def __init__(self): 
     ... 
     self.religion = None 
     self.stats = {'intelligence': 10, 'defense': 8} 

さて、プレイヤーが宗教Way of the Whiteに参加しましょうを、どのように私は、キーintelligencedefenseとそれぞれの値を特定する行くのですreligion_dict - それをプレーヤーのstats辞書の値に適用しますか?

religion_Dict.keys()または基本的なforループでキー名を取得できますが、どのようにして対応するプレーヤーの統計値を正しく変更することができますか?

私はちょうど基本的な概念を欠いていると確信しています。いずれにせよ、この簡単な質問に答えるのを助けてくれる誰にも感謝します!それは有り難いです!

+0

キーを使用してルックアップを実行できるのはなぜですか? –

+0

宗教からの狂信者をプレイヤーの統計に追加しますか? –

答えて

2

は、あなたがこのついて行くだろうかのスケッチです:もちろん

religion_Dict = {'Way of the White': {'buffs': {'intelligence': 5, 'defense': 3}, 
            'abilities': [...], 
            'description': '...'}} 
buffs = religion_Dict['Way of the White']['buffs'] 

for key in buffs: 
    player.stats[key] = player.stats.get(key,0) + buffs[key] 

、あなたはあなたのプレイヤークラスのメソッドでは、このロジックをラップする必要がありますが、上記のロジックはあなたが何であるかであります探している。 .getメソッドは、キー値がない場合に返されるデフォルト値である2番目の引数を取ります。したがって、この行にはstatが存在するかどうかに1が加算され、存在しなければ1に0が加算されます。

1

これは、辞書の値をプレーヤーの統計に割り当てる方法をPlayerに追加します。 getを使用して値がディクショナリにあること、およびフィールドにbuffsが含まれていることを確認します。もしそうなら、それはintelligencedefenseの値を得て、それをプレイヤーの統計に加えます。ここで

class Player(object)  
    def __init__(self): 
     ... 
     self.religion = None 
     self.stats = {'intelligence': 10, 'defense': 8} 

    def join_religion(religion): 
     stats = religion_dict.get(religion) 
     if stats and 'buffs' in stats: 
      self.intelligence += stats['buffs'].get('intelligence', 0) 
      self.defense += stats['buffs'].get('defense', 0) 

p = Player() 
p.join_religion('Way of the White') 
0
self.stats = religion_Dict['Way of the White']['buffs'] 
関連する問題