2016-04-12 13 views
2
scores = [] 
surfers = [] 
results_f = open("results.txt") 

for each_line in results_f: 
    (name,score) = each_line.split() 
    scores.append(float(score)) 

for line in results_f:      
    (name,score) = line.split() 
    surfers.append(name) 

results_f.close() 
scores.sort(reverse = True) 
print("The high scores are : ") 
print("1 - "+str(scores[0])) 
print("2 - "+str(scores[1])) 
print("3 - "+str(scores[2])) 

print(surfers[0]) 

Nur ein experimentelles Programm. Aber die zweite for-Schleife scheint nicht zu laufen. Wenn ich die Positionen der for-Schleifen wechsle; wieder würde die Schleife in der zweiten Position nicht laufen. Warum passiert dies?Python: Die zweite For-Schleife läuft nicht

Antwort

6

Dateien sind keine Listen. Sie können sie nicht durchlaufen, ohne das Dateiobjekt zurückzuspulen, da die Dateiposition nach dem Lesen nicht auf den Anfang zurückgesetzt wird.

Sie results_f.seek(0) zwischen den Schlaufen könnte hinzufügen:

for each_line in results_f: 
    (name,score) = each_line.split() 
    scores.append(float(score)) 

results_f.seek(0) 

for line in results_f:      
    (name,score) = line.split() 
    surfers.append(name) 

aber Sie wären viel besser durch nicht zweimal Looping. Sie haben bereits die name Informationen in der ersten Schleife. Nur Schleife einmal:

for each_line in results_f: 
    (name,score) = each_line.split() 
    scores.append(float(score)) 
    surfers.append(name) 

nur Ihr Code die scores Liste sortiert; Die surfers Liste wird nicht folgen. Wenn Sie Namen und Noten zusammen sortieren müssen, geben Sie Ihre Namen und Noten in einer Liste zusammen; wenn Sie die Punktzahl die erste Stelle setzen müssen Sie nicht einmal sort etwas sagen Besonderes:

surfer_scores = [] 

for each_line in results_f: 
    name, score = each_line.split() 
    surfer_scores.append((float(score), name)) 

surfer_scores.sort(reverse=True) 
print("The high scores are : ") 
for i, (score, name) in enumerate(surfer_scores[:3], 1): 
    print("{} - {}: {}".format(i, name, score) 
+0

Danke, nur habe mich gefragt, um die zweite for-Schleife nicht funktioniert, für die Sie bereits beantwortet. – Vasanth

+0

Vielen Dank für die zusätzlichen Informationen, sehr hilfreich. – Vasanth

+0

Immer noch überrascht. Wie können zwei Datenelemente an einer einzigen Stelle in einer Liste angezeigt werden? – Vasanth