2017-11-13 15 views
1

リストを使用してゲームのプレイヤーの得点のランク付けポイントを更新するには、いくつかのコードを作成するのに少し問題があります。私は最初のリストは、例えば、プレイヤーが入ってきた位置のリストである:リストの操作と比較Pythonのリスト操作とリストの比較

results = [P2, P4, P3, P1, P5, P6] 

このリストは降順である(P2はP4が第など来て、最初に来た)とそのI他のコードによって決定されますプログラムに含まれています。 、

rankingPoints = [100, 50, 25, 10, 5, 0] 

(100になるだろうP2、P4は、50などになるだろう)

最後に:私が持っている第二のリストは、私が彼らの位置に基づいて、各プレイヤーに割り当てるランキングポイントのリストであります私は、各プレイヤーのためのネストされたリストが含まれている3番目のリストがあります:

playerRank = [[P1], [P2], [P3], [P4], [P5], [P6]] 

を基本的に私がやりたいと思ってるものを「0」のランキングのスコアで「playerRank」リスト内の各プレイヤーの初期化である(プレイヤーがに読み込まれcsvファイルからのリストと私は手動で '0'でそれらを初期化することはできません)

次に、ゲーム内での彼らの位置に基づいて、適切な量のランキングスコアを現在のランキングスコアに追加します([P1,0]、[P2,0]、[P3,0]私は新しい午前として、この上の任意の助けをいただければ幸いです

playerRank = [[P1, 10] [P2, 100], [P3, 25], [P4, 50], [P5, 5], [P6, 0]] 

:(そのスコアランキングは常にプレーヤーのための現在のランキングのスコアの上に追加されます複数のゲームが存在します)、望ましい結果は次のようになりますプログラミングとその背後にあるコードとロジックを解明することに苦労しています

ありがとう

+0

"助けてください"が有効な質問をしません。あなたのコードを私たちに教えてください。 [尋ねる] – Julien

答えて

0

あなたが選手を初期化したい場合は最初にランク付けし、必要な時はいつでもそれらを更新し、あなたがこのような何かを行うことができます。

def updateScore(playerRank, rankingPoints): 
    for ind, i in enumerate(rankingPoints): 
     playerRank[ind][1] = playerRank[ind][1] + rankingPoints[ind] 

results = ['P2', 'P4', 'P3', 'P1', 'P5', 'P6'] 
rankingPoints = [100, 50, 25, 10, 5, 0] 

print("Initializing player ranks...") 
playerRank = [[results[i],0] for i in range(0,len(results))] 
print(playerRank) 

print("Updating scores...") 
updateScore(playerRank, rankingPoints) 
playerRank = sorted(playerRank) 
print(playerRank) 

出力:

Initializing player ranks... 
[['P2', 0], ['P4', 0], ['P3', 0], ['P1', 0], ['P5', 0], ['P6', 0]] 
Updating scores... 
[['P1', 10], ['P2', 100], ['P3', 25], ['P4', 50], ['P5', 5], ['P6', 0]] 

あなたがいずれかをupdateScore呼び出すことができますあなたの選手のランクを更新したい時。

1

あなたがゲームの結果を作成するために、スコアとzipを更新するためにdefaultdictを使用することができます。

from collections import defaultdict 
results = ['P2', 'P4', 'P3', 'P1', 'P5', 'P6'] 
rankingPoints = [100, 50, 25, 10, 5, 0] 
d = defaultdict(int) 
for a, b in zip(results, rankingPoints): 
    d[a] += b 

final_results = [[a, b] for a, b in sorted(d.items(), key=lambda x:x[0])] 

出力:

[['P1', 10], ['P2', 100], ['P3', 25], ['P4', 50], ['P5', 5], ['P6', 0]] 

をあなただけの、最終的な出力を達成するための辞書意志をsorted(zip(results, rankingPoints), key=lambda x:x[0])を使用することができますが後でプログラムで各プレーヤーのスコアを増やすことができます。

関連する問題