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:
zeige ihre Position an;
rufe die Funktion für eine einzelne Frage auf;
addiere nur dann 1, wenn der zurückgegebene boolesche Wert
Trueist.
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
scorezu Beginn auf0.Durchlaufe jeden Datensatz in
plan["questions"].Gib vor jeder Frage eine Leerzeile und
Question POSITION of TOTALaus.Rufe
ask_questionfür diesen Datensatz auf.Addiere nur dann 1, wenn die Funktion
Truezurü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.