2016-12-19 7 views
1

私は、各パスでソートされたリストのランクを見つけるプログラムを書いています。 私のプログラムはここにある:私はアリスのスコアのために与えた入力がリストの要素をPython3で1つずつ読む

import sys 

# No. of Students considered 
n = int(input().strip()) 

# Scores of n students 
scores = [int(scores_temp) for scores_temp in input().strip().split(' ')] 

# No. of scores considered for alice 
m = int(input().strip()) 

# Scores of Alice 
alice = [int(alice_temp) for alice_temp in input().strip().split(' ')] 

for i in alice: 
    #temp1 = sorted(alice, reverse = True) 
    temp = alice 
    print(temp) 
    scores.extend(temp) 
    temp2 = sorted(scores, reverse = True) 
    unique = [] 
    [unique.append(item) for item in temp2 if item not in unique] 
    print(unique.index(i)+1) 

た:

>>> 45 87 23 

私の目標は、45が最初に、その後、順位を印刷した後、その後、87ので、上に進んで処理することですにありますが、問題は処理45,87、および23の後でしかないため、ランクが印刷され、結果が間違っています。

正しい答えを得るためには何をすべきか。入力と出力の 例がここで与えられる:

>>> n = 7 
>>> scores = [100, 100, 50, 40, 40, 20, 10] 
>>> m = 4 
>>> alice = [5, 25, 50, 120] 

同じスコアが最大スコアは最初のランクを取得するような方法で、同じランクを与えられています。実施例100は、正しい出力である第1位 です:

6 
4 
2 
1 

しかし、私はいくつかの他の間違った答えを得ます。 (私はユニークなスコアのランクが必要です) 何をすべきですか?

+0

出力してもよろしいですか? IMHO 2人の学生が100点、アリスが50点を取得した場合、彼女は3位になるはずですので、私は8 6 3 1を期待します。ユニークな点数を付けたい場合は、それを言う必要があります。 –

答えて

1

コードの根本原因は、ループ内でextendが原因であり、各ループの結果は他のものに依存します。 extend add ALL各ループのアリスの得点。

  1. オリジナルスコア:[100、100、50、40、40、20、10]
  2. 第一のループ:[120、100、100、50、50、40、40、25、20、10 、5]
  3. 第二のループ:[120、120、100、100、50、50、50、40、40、25、25、20、10、5、5]

代わりのextend(alice)append(i)を使用すると、あなたのケースを解決することができます。 appendは、のみを追加するので、各ループ内のアリスの得点はです。

for i in alice: 
    scores.append(i) 
    temp2 = sorted(scores, reverse = True) 
    unique = [] 
    [unique.append(item) for item in temp2 if item not in unique] 
    print(unique.index(i)+1) 

> alice = [5, 25, 50, 120] 

6 #temp2: [100, 100, 50, 40, 40, 20, 10, 5] 
4 #temp2: [100, 100, 50, 40, 40, 25, 20, 10, 5] 
2 #temp2: [100, 100, 50, 50, 40, 40, 25, 20, 10, 5] 
1 #temp2: [120, 100, 100, 50, 50, 40, 40, 25, 20, 10, 5] 

注:各ループは他のループに依存するため、差の入力順序が結果に影響します。

> alice = [120, 50, 25, 5] 

1 #temp2: [120, 100, 100, 50, 40, 40, 20, 10] 
3 #temp2: [120, 100, 100, 50, 50, 40, 40, 20, 10] 
5 #temp2: [120, 100, 100, 50, 50, 40, 40, 25, 20, 10] 
8 #temp2: [120, 100, 100, 50, 50, 40, 40, 25, 20, 10, 5] 
関連する問題