2017-03-08 10 views
0

ich gebeten worden, haben eine Leaderboard zu entwerfen,Python: Rangliste

Das ist, was ich versucht

def leader(): 

    file = open ("res.txt","r") 
    reader = csv.reader(file) 
    print (("{:20s}{:20s}{:20s}{:20s}".format("\nPlayer","Matches played","Won","Lost"))) 
    won = 100 

    for r in reader: 
     won = won-1 
     if r[2] == str(won): 
      print (("{:20s}{:20s}{:20s}{:20s}".format(r[0],r[1],r[2],r[3]))) 



    file.close() 

Meine CSV-Datei wie diese

Leeroy,19,7,12 
Jenkins,19,8,11 
Tyler,19,0,19 
Napoleon Wilson,19,7,12 
Big Boss,19,7,12 
Game Dude,19,5,14 
Macho Man,19,3,16 
Space Pirate,19,6,13 
Billy Casper,19,7,12 
Otacon,19,7,12 
Big Brother,19,7,12 
Ingsoc,19,5,14 
Ripley,19,5,14 
M'lady,19,4,15 
Einstein100,19,8,11 
Dennis,19,5,14 
Esports,19,8,11 
RNGesus,19,7,12 
Kes,19,9,10 
Magnitude,19,6,13 

ich es wünsche sieht Zeige die Person mit den meisten Gewinnen zuerst an, kannst du helfen?

+1

Sie können versuchen, die gesamte Datei zuerst in Form einer Liste in den Speicher einzulesen und dann 'sorted()' darauf mit den entsprechenden Parametern anzuwenden. –

Antwort

-1
keys = ["Player","Matches played","Won","Lost"] 

# read file 
with open("res.txt") as f: 
    content = f.readlines() 
# you may also want to remove whitespace characters like `\n` at the end of each line and 
# split it by ',' then form a dictionary out of it 
content = [dict(zip(keys,x.strip().split(','))) for x in content] 
# sort the above list of dicts in decreasing orde. 
final_result = sorted(content, key=lambda k: k['Won'], reverse=True) 

print final_result# sorted By score 
# first element is the one with highest Won value 
print final_result[0] # highest Won 
+0

Grund für die negative Abstimmung? – anekix

0

versuchen, die Datei in eine Liste Schlürfen:

all_rows = list(reader) 

Dann sortieren alle Zeilen auf dem Schlüssel der meisten Siege:

sorted_rows = sorted(all_rows, key=(lambda row: row[2]), reverse=True) 

Sie möchten vielleicht mehrere Sorten stapeln, oder Definieren Sie einen komplexeren Schlüssel, sodass Sie die Reihenfolge innerhalb einer gleichen Anzahl von Gewinnen erzwingen können (zum Beispiel sind 7 Siege von 8 Spielen besser als 7 Siege von 100 Spielen).

+0

Was macht key = lambda? –

+0

Ein [* Lambda-Ausdruck *] (https://docs.python.org/3/tutorial/controlflow.html?highlight=lambda#lambda-expressions) ist im Grunde eine Inline-Funktionsdefinition. Es erstellt eine Funktion, die den Ausdruck zurückgibt, der nach dem Schlüsselwort "lambda" steht. –

Verwandte Themen