2016-03-22 5 views
0

Ich habe ein Quiz mit Ergebnissen, die in eine CSV-Datei sortiert sind, nach der Beantwortung der Fragen fragt der Benutzer, ob die Ergebnisse alphabetisch oder nach höchsten bis niedrigsten sortiert werden sollen. Diese Frage wird dann wiederholt, unabhängig von der eingegebenen Antwort. Wenn jedoch die höchste oder die niedrigste eingegeben wird, wird sie alphabetisch wiederholt.Fragen, wie in einem csv zu sortieren, wird wiederholt

print ("Would you like to see the results alphabetically or by highest to lowest?") 
alpha = input() 
while alpha != "alphabetically": 
    alpha = str(input ("Would you like to see the results alphabetically or by highest to lowest? ")) 
    break 
while alpha != "highest to lowest": 
    alpha = str(input ("Would you like to see the results alphabetically or by highest to lowest? ")) 
    break 


def updatefile(file,sortby,Classnumber): #this shortens the code by about 3 lines per file update 
if Class == Classnumber: 
    with open(file,'a') as f: 
     file_writer = csv.writer(f, delimiter = ',', lineterminator='\n') 
     file_writer.writerow((name,score)) 
     sortcsv(file,sortby) 

if alpha == "alphabetically": 
    updatefile('Class 1 Results.csv',0,"1") #saves space using shortened code, makes the code use alphabetical sorting 
    updatefile('Class 2 Results.csv',0,"2") 
    updatefile('Class 3 Results.csv',0,"3") 

elif alpha == "highest to lowest": 
    updatefile('Class 1 Results.csv',1,"1") #makes the code use highest to lowest sorting 
    updatefile('Class 2 Results.csv',1,"2") 
    updatefile('Class 3 Results.csv',1,"3") 
+0

Ich habe eine Pause nach alpha! = Alphabetisch hinzugefügt und was folgt, jetzt stellt es die Frage zweimal und macht alles, was Sie ihm zum zweiten Mal sagen. – SamH314

Antwort

0

Ok, lassen Sie uns durch diesen Eingabeblock Schritt und sehen, was los ist.

print ("Would you like to see the results alphabetically or by highest to lowest?") 
alpha = input() 

Ok, so weit, aber es rätselhaft ist, warum Sie print die Aufforderung diesmal ed, und steckt es in der input() Anweisung den Rest.

while alpha != "alphabetically": 
    alpha = str(input ("Would you like to see the results alphabetically or by highest to lowest? ")) 

Nun, wenn der Benutzer „in alphabetischer Reihenfolge“ nicht geben Sie an der ersten Eingabeaufforderung, werden sie immer und immer wieder aufgefordert, bis sie es tun. Das ist wahrscheinlich nicht das, was du willst. (Auch brauchen Sie nicht str() um input().)

while alpha != "highest to lowest": 
    highesttolowest = str(input ("Would you like to see the results alphabetically or by highest to lowest? ")) 
    break 

Nun, da Ihr Benutzer eingegeben schließlich „alphabetisch“, können Sie sie erneut aufgefordert, (da „alphabetisch“! = „Höchsten zum niedrigsten“). Aber zwei große Probleme. Erstens macht der unbedingte break die while Schleife sinnlos, da sie immer nach einer Schleife beendet wird. Zweitens weisen Sie die Eingabe einer neuen Variablen highesttolowest zu, aber später testen Sie immer noch gegen alpha, so dass die Ergebnisse dieser Eingabeaufforderung nicht überprüft werden.

Der einfachste Weg, um das zu tun, was Sie scheinbar tun möchten, ist die Verwendung von Mitgliedschaftstests, um beide Bedingungen gleichzeitig zu überprüfen. Ersetze den ganzen Block mit:

alpha = '' 
while alpha not in ("alphabetically", "highest to lowest"): 
    alpha = input("Would you like to see the results alphabetically or by highest to lowest? ") 
Verwandte Themen