2017-12-05 14 views
-1

私の学校の課題のために特別なバージョンの独占を作っています。トランプモードと呼ばれています。 cpuは、サイコロの表現として2と12の間の乱数を生成します。あなたが無限のお金を持っているので、購入可能な場所はすべてあなたが着陸すると買われます。それは数回実行し、ボード全体を購入するのに必要な平均ターン数を計算する必要があります。Python:キーに遭遇したときに辞書キーの値を変更する

すべての値と場所で辞書を使用する必要があります。私はそのポジションに着陸するたびにキーの値を変更できる方法を見つけようとしていますが、どのようにキーを変更するのか分かりません。

beurt = 0 
totaal = 0 
while totaal < 40: 
    worp = throw() 
    piece.move(worp) 
    print("Na worp {}: {}, {}".format(beurt, board.names[piece.location], board.values[piece.location])) 
    totaal = totaal + worp 
    beurt += 1 

これは作品を移動するコードです。 (私のテストでは、私は彼が1ラウンド後に停止するので、whileループが40に設定されている)

for key, value in monopoly.monopolyData.dictionary.items() : 
    print (key, value) 

私はすべての私の値とキーをプリントアウトするためにこのコードを持っているが、私は変更する方法見当がつかない値...

+0

(関係のない、しかし: "サイコロの表現として2と12の間のランダムな数字が" あなたは 'randint(2,12)'や 'randint(1,6をやっています) + randint(1,6) '?適切な値の分布については後者を使用してください。) –

+0

独占データはどこにありますか?ソースディックを必要な値に調整するだけではどうですか? – Igle

+0

randintはrandint(2,12)です...独占データは別のファイルにあります。このファイルは与えられました、それはすべての場所名と値を持つリストを持つリストを持っています。私はこれら2つを組み合わせて辞書を作った。つまり、これは次のようになります:** dictionary = {"start":0、 "old kent road":60、 "community chest":0} ** –

答えて

0

問題の最も簡単な方法は、popのデフォルト値を0にすることです。これにより、現在のフィールドとその値が辞書から削除されます。フィールドが既に訪問されている場合は、0を返します。 0に設定するのではなく、フィールドを削除すると、各フィールドが訪問されるまでループするのに、while <your_dict>を使うだけの利点があります。

簡体例:

MAX = 20 
values = {i: 40 for i in range(MAX)} 
position = 0 
while values: 
    dice = randint(1, 6) + randint(1, 6) 
    position = (position + dice) % MAX 
    print("pos: {}, val: {}".format(position, values.pop(position, 0))) 
+0

しかし、私はこの場所に行った後、これでもう一度それを訪問することはできますか?あなたがそれらを購入した後に消えてはいけないが、彼らは再訪可能でなければならないので... –

+0

@ J.Moonen場所を再訪することができるが、 'pop(posiiton、0)'は 'position'として' 0'を返すだけである。もはや辞書にはない。 –

+0

そして、キー、例えば古いケントの道は呼び出し可能ですか?フィードバックは次のようになります:**ターン1:古いケント道路、ターン2:... ** –

関連する問題