Abschlussprojekt: Entwickle ein Quizprogramm · Übung
Gib hilfreiches Feedback zu einer Antwort
Der Bauplan kann zwei Strings vergleichen, aber das fertige Programm braucht ein nützliches Ergebnis für eine Frage und eine eingegebene Antwort.
Entwickle dieses Verhalten, bevor du input() oder eine Schleife ergänzt.
Lege einen kleinen Funktionsvertrag fest
Verwende einen Fragedatensatz aus dem Quizplan:
question = {
"prompt": "Which keyword ends a loop?",
"answer": "break",
}
Eine gezielt für die Auswertung zuständige Funktion könnte die Frage und eine fest vorgegebene Antwort erhalten:
result = response_result(question, " BREAK ")
Ihr Ergebnis soll zwei zusammengehörige Angaben enthalten:
ob die Antwort richtig war;
die anzuzeigende Rückmeldung.
Ein Dictionary macht diese Felder ausdrücklich sichtbar:
{
"correct": True,
"message": "Correct!",
}
Bei einer falschen Antwort ist der boolesche Wert False, und die Meldung kann die erwartete Antwort nennen.
Warum Daten zurückgeben, statt sofort etwas auszugeben?
Mit einem Dictionary als Rückgabewert bleibt die Funktion in verschiedenen Zusammenhängen nutzbar:
die interaktive Funktion kann ihre Meldung ausgeben;
die Schleife zur Punkteberechnung kann ihren booleschen Wert prüfen;
ein Test kann beide Felder prüfen, ohne die Terminalausgabe abzufangen.
Die Funktion trifft eine Entscheidung. Andere Funktionen entscheiden später, wann Fragen gestellt, Meldungen angezeigt und Punkte aktualisiert werden.
Verwende die bestehende Vergleichsregel erneut
Wiederhole .strip().lower() nicht in jeder neuen Funktion. Rufe answers_match() auf, damit im gesamten Quiz dieselbe Regel für Antworten gilt.
Falls sich diese Regel später ändert, bleibt eine gezielte Hilfsfunktion die maßgebliche Stelle dafür.
Prüfe jetzt beide Wege
Verwende feste Werte:
assert response_result(question, "break")["correct"] is True
assert response_result(question, "continue")["correct"] is False
Dieser Meilenstein bleibt ohne interaktive Eingabe. So lässt sich der Rückgabevertrag verstehen, bevor die Terminaleingabe einen weiteren Ablauf hinzufügt.
Warum gibt response_result() ein Dictionary zurück, statt das Feedback selbst auszugeben?
Aufgabe
Implementiere die neue Funktion response_result(question, given).
Sie muss answers_match(given, question["answer"]) aufrufen und Folgendes zurückgeben:
{"correct": True, "message": "Correct!"}bei einer Übereinstimmung;andernfalls
{"correct": False, "message": "Not quite. The answer is EXPECTED."}, mit der tatsächlichen Antwort der Frage.
Behalte deine fertigen Funktionen aus dem Bauplan und die beiden vorbereiteten Zusicherungen bei. Dieser Meilenstein verwendet fest vorgegebene Antworten und ruft input() nicht auf.