0%

Abschlussprojekt: Entwickle ein Quizprogramm · Übung

Durchlaufe das Quiz und zähle die Punkte

Eine vollständige Frage funktioniert. Die nächste Ebene verarbeitet die Liste.

run_questions(plan) soll jede Frage stellen und den Endpunktestand zurückgeben.

Beginne mit dem Punktestand

Der Akkumulator beginnt bei null:

score = 0

Für jede Frage:

  1. zeige ihre Position an;

  2. rufe die Funktion für eine einzelne Frage auf;

  3. addiere nur dann 1, wenn der zurückgegebene boolesche Wert True ist.

Gib den Punktestand nach der Schleife zurück.

Zeige Positionen an, die für Menschen passen

Die Liste liefert dir nacheinander jede Frage, aber eine for-Schleife sagt dir nicht von selbst, bei welcher Nummer du bist. Die spielende Person soll Positionen sehen, die bei 1 anfangen.

Das Werkzeug dafür kennst du bereits. Es ist der Zähler aus Kapitel 7, mit denselben drei Teilen wie bei jedem Akkumulator:

total = len(questions)
number = 1

for question in questions:
    print(f"Question {number} of {total}")
    number += 1

number erhält seinen Anfangswert vor der Schleife, verändert sich einmal pro Durchlauf und wird im Schleifenrumpf verwendet. Wenn du total vor der Schleife ermittelst, hat jede Frage dieselbe Gesamtzahl. Ist die Liste leer, zeigt die Schleife keine Fragen an, und der Punktestand bleibt null.

Halte die Punkteberechnung außerhalb von ask_question

ask_question verarbeitet eine einzelne Frage und gibt einen booleschen Wert zurück. Die Funktion soll nicht auf einen globalen Punktestand zugreifen.

Die Schleife ist für den Akkumulator zuständig, denn sie weiß, wann ein vollständiges Quiz beginnt und endet.

Durch diesen Aufbau bleibt die Funktion für eine einzelne Frage wiederverwendbar. Ein späterer Übungsmodus könnte sie aufrufen, ohne Punkte zu zählen.

Gib den Wert vor der Ergebnisanzeige zurück

Dieser Meilenstein gibt den Punktestand als ganze Zahl zurück, zeigt aber noch keinen Abschlussbericht an.

Durch diese Trennung kannst du Folgendes prüfen:

score = run_questions(plan)
assert score == 2

Der nächste Meilenstein legt fest, wie die Zahl dargestellt wird.

Teste einen gemischten Ablauf

Ein hilfreicher Durchlauf mit drei Fragen enthält:

  • eine richtige Antwort;

  • eine falsche Antwort;

  • eine richtige Antwort mit anderer Groß- und Kleinschreibung oder umgebenden Leerzeichen.

Der erwartete Punktestand ist 2. Das prüft das Aufsummieren, beide Feedbackwege und die gemeinsame Bereinigungsregel.

Die Antworten ergeben True, False und True. Welchen Punktestand soll die Schleife zurückgeben?

Aufgabe

Implementiere run_questions(plan).

  • Setze score zu Beginn auf 0.

  • Durchlaufe jeden Datensatz in plan["questions"].

  • Gib vor jeder Frage eine Leerzeile und Question POSITION of TOTAL aus.

  • Rufe ask_question für diesen Datensatz auf.

  • Addiere nur dann 1, wenn die Funktion True zurückgibt.

  • Gib den Endpunktestand nach der Schleife zurück.

Behalte alle früheren Funktionen bei. Submit prüft unterschiedliche Fragenzahlen und Kombinationen aus richtigen und falschen Antworten.

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

print(run_questions(build_quiz_plan()))

Verwende deine eigenen Fragen für einen Durchlauf mit nur richtigen Antworten und für einen gemischten Durchlauf. Prüfe die Nummerierung und vergleiche den zurückgegebenen Punktestand mit deiner eigenen Zählung.

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.