2012-03-25 1 views
1

私はクイズで2人のプレーヤーの間のスコアの差を計算するコードを作成しようとしています。第1ラウンドの得点と第2ラウンドの得点があります。出力のリストの2つの要素をどのようにペアにするのですか?

これは私がこれまで持っているものです。

import math 

option = input ('How many players?: ') 

playerlist = [] 
firstroundlist = [] 
secondroundlist = [] 

j = 0 
while j < option: 
    name = raw_input('Enter player\'s name: ') 
    playerlist.append(name,) 

    firstround = input ('Enter first round score: ') 
    firstroundlist.append(firstround,) 

    secondround = input('Enter second round score: ') 
    secondroundlist.append(secondround,) 

    j += 1 

y=0 
z=1 
dis=[] 
while z<len(playerlist): 
    comparison = (firstroundlist[y]+secondroundlist[y])-(firstroundlist[z]+secondroundlist[z]) 
    print playerlist[y], '-', playerlist [z], 'is', comparison 
    z+=1 

z==0 
y+=1 

しかし、のは、私は、4人の異なるプレーヤーのための入力点数を言わせて、このコードの出力は次のようになります:

Player 1 - Player 2 is #scoredifference 
Player 1 - Player 3 is #scoredifference 
Player 1 - Player 4 is #scoredifference 

質問は、次のようなコードに変更するにはどうすればいいのですか?

Player 1 - Player 2 is #scoredifference 
Player 1 - Player 3 is #scoredifference 
Player 1 - Player 4 is #scoredifference 
Player 2 - Player 3 is #scoredifference 
Player 2 - Player 4 is #scoredifference 
Player 3 - Player 4 is #scoredifference 
+0

サイドノート:whileループを使用しないでください。代わりに 'for range(option):... 'の' for j'を使います(2番目のループでは 'range(1、len(playerlist))')。 –

答えて

1
for i in range(len(playerlist)): 
    for j in range(i+1, len(playerlist)): 
     print "player %d - player %d is %d", (i, j, scoredifference[i,j]) 

あなたのためのトリックを行う必要があります。もちろん、あなたがitertools.combinationsを探している正しい式とscoredifference ..

+1

これは3-3を比較します。また、ネストされた 'range(len())'は本当にunpythonicだと思います。 – phihag

+0

私のoff-by-1エラーをキャッチしてくれてありがとう! –

+0

@KurtSpindlerありがとうございました!ちなみに、すべてのスコアの差の平均値をどのように印刷することができますか? – DarsAE

3

を置き換える:あなたのデータ構造が最適ではない

import itertools 
for y,z in itertools.combinations(range(len(playerlist)), 2): 
    comparison = (firstroundlist[y]+secondroundlist[y])-(firstroundlist[z]+secondroundlist[z]) 
    print (playerlist[y] + '-' + playerlist[z] + 'is' + str(comparison)) 

注意を。

import itertools 
playernum = int(raw_input('How many players?: ')) 
players = [(
    raw_input('Enter player\'s name: '), 
    int(raw_input('Enter first round score: ')), 
    int(raw_input('Enter second round score: ')), 
) for i in range(playernum)] 

for p,q in itertools.combinations(players, 2): 
    comparison = (p[1]+p[2])-(q[1]+q[2]) 
    print (p[0] + '-' + q[0] + 'is' + str(comparison)) 

ところで、あなたの現在のコードは、構文上の誤りが含まれています:あなたはこのように、プレーヤ情報のtuplesを使用する必要があります。代わりにあなたがしたい

name = raw_input('Enter player's name: ') 

の:

name = raw_input('Enter player\'s name: ') 
また

、代わりのinput()(!任意のPythonコードを実行する)あなたはint(raw_input())をしたいです。

+0

ありがとう! しかし、私はこのエラーを得た:9行目は、pの で、itertools.combinations(プレイヤー)におけるQ: 例外TypeError:必須の引数は 'r'(POS 2) それが何を意味しているが見つかりませんか? – DarsAE

+0

おっと、申し訳ありません、私の間違い - 私は必要な組み合わせの数を外しました。 '、2'で答えを更新しました。 – phihag

関連する問題