Vom funktionierenden Code zum Programmentwurf · Übung
Greife das Quizprogramm wieder auf
Das Abschlussprojekt von Python-Grundlagen I war ein funktionierendes Quizprogramm. Diese kleinere Version beginnt mit denselben vertrauten Teilen:
einer Liste von Frage-Dictionarys;
einer eingegebenen Antwort für jede Frage;
einer Funktion, die eine Antwort prüft;
einer Funktion, die das Quiz durchläuft und richtige Antworten zählt.
questions = [
{
"prompt": "What does len('cat') return?",
"answer": "3",
},
{
"prompt": "Which keyword starts a function?",
"answer": "def",
},
]
Jedes Dictionary modelliert eine Frage. Die Schlüssel legen eine informelle Vereinbarung fest: Jeder Datensatz sollte prompt und answer bereitstellen.
Verfolge den Aufruf
Die Quizschleife kann zueinandergehörige Positionen aus den beiden Listen auswählen:
for index in range(len(question_list)):
question = question_list[index]
response = response_list[index]
Dann fragt sie check_answer nach einem booleschen Ergebnis:
if check_answer(question, response):
score += 1
Dieser Entwurf ist prozedural, lesbar und für ein kleines Programm geeignet. Wir suchen keinen Vorwand, ihn zu ersetzen. Wir schaffen einen funktionierenden Ausgangspunkt, den spätere Entwürfe tatsächlich verbessern müssen.
Bringe einen Quizdurchlauf in die richtige Reihenfolge:
Ziehe die Optionen in die richtige Reihenfolge oder verwende die Pfeiltasten.
Vergleiche die eingegebene Antwort mit der gespeicherten Antwort.
Erhöhe die Punktzahl, wenn das Ergebnis wahr ist.
Wähle eine Frage und die dazugehörige eingegebene Antwort aus.
Rufe
check_answerauf.
Vervollständige die vertraute Funktion
Der Editor stellt die Daten und check_answer bereit. Vervollständige run_quiz, ohne das Datenmodell zu ändern. Das ist eine Übung im Lesen und Rekonstruieren, kein neuer Programmentwurf.
Aufgabe
Vervollständige run_quiz.
Durchlaufe jede Frageposition, wähle die dazugehörige eingegebene Antwort aus, rufe check_answer auf und gib die Anzahl richtiger Antworten zurück. Das vorgegebene Programm sollte Score: 2/3 ausgeben.