2016-10-16 4 views
1

Ich versuche eine Reihe von Eingaben zu durchlaufen, in denen ich nach der Kursnote, den Kursstunden und dem Kurscode eines Benutzers frage. Die Schleife wiederholt sich so lange, bis der Benutzer "fertig" eingibt. Sobald der Benutzer fertig ist, möchte ich, dass die eingegebenen Kurse mit der Note und den Stunden ausgedruckt werden.Schleifen und Speichern mehrerer Eingaben

Beispiel:

course_count = False 

#LOOP through Inputs 
while not course_count: 

    #GET course code 
    course_code = input("Please Enter the Course Code (or done if finished): ") 

    #IF course code is not equal to done (convert to lowercase) 
    if course_code.lower() != "done": 

     #GET course hours 
     course_hours = int(input("How many credit hours was " + course_code + "? ")) 

     #GET grade earned 
     course_grade = float(input("What grade did you earn in " + course_code + "? ")) 

    #ELSE END LOOP 
    else: 
     course_count = True 

    print("Course: " + course_code + " Weight: " + str(course_hours) + " hours " + "Grade: " + str(course_grade) + "%") 

Das Problem ist, es wird immer nur eine eingegebene Kurs, Stunde und Grad ausdrucken. Wie würde ich mehr als eine Antwort mit nur akkumulativen Strings speichern?

Der Ausgang machen Ich bin auf der Suche ist:

# Please Enter the Course Code (or done if finished): COMP 10001 
# How many credit hours was COMP 10001? 5 
# What grade did you earn in COMP 10001? 75 

# Please Enter the Course Code (or done if finished): COMP 20002 
# How many credit hours was COMP 10001? 8 
# What grade did you earn in COMP 10001? 95 

# Please Enter the Course Code (or done if finished): done 

# Course: COMP 10001 Weight: 5 Grade: 75% 
# Course: COMP 20002 Weight: 8 Grade: 95% 

Es ist für eine Schule Praxis Problem und wurden Sie können nicht erlaubt, Listen, Arrays oder Wörterbücher zu verwenden, wenn das Sinn

+0

Hinzufügen einer Registerkarte vor dem Drucken? – tim

+0

@tim, die nicht die formatierte Ausgabe geben würde, die er erstellen möchte, wo eine Zusammenfassung bereitgestellt wird, welche Informationen während der Laufzeit eingefügt werden. –

Antwort

0

eine Ausgabezeichenfolge verwenden output_string

Fügen Sie jede neue Zeile in der Ausgabezeichenfolge

... 
output_string += "Course: {} Weight: {} hours Grade: {}\n".format(course_code, course_hours, course_grade" 
#ELSE END LOOP 
... 

Diese Daten in einen String ansammelt, Standardzeichenfolge Formatierung, um die Daten von jedem Durchgang durch die Schleife einzufügen.

Am Ende des Programms die Ausgabezeichenfolge ausgeben.

Wie andere bemerkt haben, ist dies eine ziemlich alberne Art, Daten zu speichern, da der Zugriff darauf, außer zum Ausdrucken, schwierig sein wird. Listen/Wörterbücher wären viel besser.

+0

Das hat funktioniert! Vielen Dank, ich habe so viele Stunden in diesem haha ​​verbracht. Ich weiß es wirklich zu schätzen –

1

macht Sehen Sie, wenn beziehen Sie dieses vereinfachte Beispiel auf Ihren Code. Um die Ausgabe zu erhalten Sie beschreiben, müssen Sie Speicher der Ausgabetext irgendwie den späteren Zugriff:

output_lines = [] 

for i in range(10): 
    input_string = input("Enter some input") 
    output_lines.append(input_string) 

for output_line in output_lines: 
    print(output_line) 

Aus den Kommentaren, nur mit String „Akkumulation“ (Warnung: quadratisch schlecht):

output_text 

for i in range(10): 
    input_string = input("Enter some input") 
    output_text = output_text + '\n' + input_string 
print(output_text) 

Beachten Sie, dass die bevorzugte Methode zum Erstellen einer langen Zeichenfolge ist an eine Liste anfügen und 'separator'.join(list_of_strings) verwenden oder eins nach dem anderen wie oben drucken.

+0

Hey YXD, Danke :). Ich verstehe das, aber das Problem ist, dass es sich um ein Problem in der Schulpraxis handelt und es nicht erlaubt war, Listen/Arrays/Wörterbücher zu verwenden, und nur die Akkumulation von Strings, wenn das Sinn macht? –

+0

Das ist eine ziemlich dumme Anforderung IMO, aber Sie können entweder innerhalb der Schleife drucken, was bedeutet, dass Ihre Ausgabe wird ein wenig anders aussehen (versuchen Sie es), oder deklarieren Sie Ihre Variable außerhalb der Schleife und anhängen.Das ist ziemlich schlecht in Bezug auf die Leistung - siehe http://stackoverflow.com/a/1967732/553404 und andere. – YXD

+1

stimme ich voll und ganz zu. Es gibt offensichtlich eine Menge einfacher Möglichkeiten, dies zu tun. Ich werde es versuchen, jetzt danke. –

1

Sie können es nützlich finden, Ihre Informationen in einer dictionary Struktur zu speichern, in der der Schlüssel als Kurscode gespeichert ist. Dann ist es so einfach wie über jeden in Ihrem Wörterbuch gespeicherten Kurs zu iterieren, um die Details zu erhalten.

Beispiel:

course_count = False 
course_info = {} 
#LOOP through Inputs 
while not course_count: 

    #GET course code 
    course_code = input("Please Enter the Course Code (or done if finished): ") 
    course_info[course_code] = {}; 

    #IF course code is not equal to done (convert to lowercase) 
    if course_code.lower() != "done": 

     #GET course hours 
     course_hours = int(input("How many credit hours was " + course_code + "? ")) 
     course_info[course_code]['hours'] = course_hours; 

     #GET grade earned 
     course_grade = float(input("What grade did you earn in " + course_code + "? ")) 
     course_info[course_code]['grade'] = course_grade 

    #ELSE END LOOP 
    else: 
     course_count = True 

For course_code in course_info : 
    course_hours = course_info[course_code]['hours'] 
    course_grade = course_info[course_code]['grade'] 
    print("Course: " + course_code + " Weight: " + str(course_hours) + " hours " + "Grade: " + str(course_grade) + "%") 
Verwandte Themen