0%

Abschlussprojekt: Entwickle ein Quizprogramm · Übung

Zeige das Endergebnis an

Das Quizprogramm kann jetzt einen Punktestand zurückgeben. Gib dem vollständigen Durchlauf einen Anfang und ein Ende.

Ergänze zwei Funktionen mit klaren Aufgaben:

  • score_message(score, total) formatiert eine Ergebniszeile;

  • run_quiz(plan) zeigt den Titel an, führt die Fragen aus, gibt den Abschlussbericht aus und gibt den Punktestand zurück.

Formatiere anhand der Werte

Eine Meldung zum Punktestand soll für jede Quizlänge funktionieren:

def score_message(score, total):
    return f"{score} out of {total} correct."

Die Funktion soll ihre Parameter verwenden, keine fest einprogrammierte Gesamtzahl aus einem Beispielplan.

Mit score = 2 und total = 3 lautet das Ergebnis:

2 out of 3 correct.

Lass die steuernde Funktion den Ablauf erzählen

Eine übergeordnete Funktion lässt sich besonders gut lesen, wenn ihre Aufrufe die einzelnen Phasen beschreiben:

show the title
run all questions
show the final heading
show the score message
return the score

Die genaue Schleife, die Eingabeprüfung und der Antwortvergleich gehören in die Funktionen, die du bereits getestet hast.

Gib auch nach einer Ausgabe einen Wert zurück

run_quiz(plan) gibt die Inhalte für die spielende Person aus, soll aber auch den Endpunktestand zurückgeben.

Der Rückgabewert ermöglicht Tests und spätere Wiederverwendung. Ausgeben und Zurückgeben haben verschiedene Zwecke, wie du in Kapitel 8 gelernt hast.

Achte bewusst auf die Abstände

Verwende eine Leerzeile vor der ersten Frage und vor FINAL SCORE. Die Frageschleife gibt bereits selbst eine führende Leerzeile aus. Die übergeordnete Funktion braucht dort also keine weitere.

Die Ausgabe soll mit der Meldung zum Punktestand enden. Vermeide vorübergehende Diagnoseausgaben im fertigen Ablauf.

Teste den gesamten Ablauf

An diesem Punkt führt ein Testaufruf durch mehrere Funktionsgrenzen:

run_quiz
  -> run_questions
      -> ask_question
          -> read_nonempty_answer
          -> response_result

Wenn das Gesamtergebnis nicht stimmt, nutze die gezielten Prüfungen aus früheren Meilensteinen, um die fehlerhafte Ebene zu finden.

Warum soll run_quiz(plan) den Punktestand zurückgeben, nachdem die Funktion den Abschlussbericht ausgegeben hat?

Aufgabe

Ergänze die abschließende Darstellungsebene.

Implementiere score_message(score, total) so, dass die Funktion Folgendes zurückgibt:

SCORE out of TOTAL correct.

Implementiere run_quiz(plan) so, dass die Funktion:

  1. QUIZ: TITLE ausgibt;

  2. run_questions(plan) aufruft;

  3. eine Leerzeile und FINAL SCORE ausgibt;

  4. score_message(score, number_of_questions) ausgibt;

  5. den Punktestand als ganze Zahl zurückgibt.

Behalte alle früheren Funktionen bei. Submit prüft unterschiedliche Punktestände und die zwischen den Darstellungsfunktionen übergebenen Werte.

Um diese Funktion mit Run auszuprobieren, füge vorübergehend diesen Aufruf unter den Definitionen und vorhandenen Zusicherungen hinzu:

print(run_quiz(build_quiz_plan()))

Prüfe den Titel, das Feedback und den Abschlussbericht. Diese vorübergehende Ausgabe zeigt den zurückgegebenen Punktestand nach dem Bericht noch einmal an, damit du ihn vergleichen kannst.

Entferne den vorübergehenden Aufruf vor Submit und bevor du fortfährst. Behalte die nicht interaktiven Zusicherungen bei. Sie prüfen die Hilfsfunktionen, ohne nach Eingaben zu fragen.