0%

Abschlussprojekt: Entwickle ein Quizprogramm · Übung

Stelle eine Frage mit vollständigem Ablauf

Du hast jetzt drei unabhängige Teile:

  • read_nonempty_answer(prompt) liest verwendbaren Text ein;

  • response_result(question, given) prüft diesen Text;

  • ein Frage-Dictionary liefert den Fragetext und die erwartete Antwort.

Setze sie in ask_question(question) zusammen.

Betrachte die Funktion aus Sicht des aufrufenden Codes

Die Funktion soll:

  1. die Frage mithilfe von read_nonempty_answer anzeigen;

  2. die zurückgegebene Antwort an response_result übergeben;

  3. die Meldung aus dem Ergebnis ausgeben;

  4. den booleschen Wert aus dem Ergebnis zurückgeben.

Die Schleife zur Punkteberechnung wird sie später so verwenden:

was_correct = ask_question(question)

if was_correct:
    score += 1

Der aufrufende Code braucht nur einen booleschen Wert. Er muss nicht wissen, wie viele ungültige Eingabeversuche es gab oder wie die Meldung erstellt wurde.

Lass jede Hilfsfunktion ihre Aufgabe behalten

Kopiere die Schleife für erneute Eingabeversuche nicht in ask_question. Rufe read_nonempty_answer auf.

Dupliziere weder die Bereinigung der Antwort noch die Erstellung der Meldung. Rufe response_result auf.

Durch das Zusammensetzen soll die neue Funktion kurz bleiben, denn die einzelnen Aufgaben haben bereits Namen.

Verwende den Fragetext des Datensatzes

Füge beim Übergeben des Fragetexts am Ende ein Leerzeichen hinzu:

Capital of France? 

Dadurch steht der Cursor sichtbar von der Frage getrennt.

Teste richtige und falsche Antworten

Ein Aufruf soll einen leeren Versuch vor einer richtigen Antwort zulassen. Ein anderer soll eine nicht leere, aber falsche Antwort sofort akzeptieren.

Das sind unterschiedliche Situationen:

  • eine leere Eingabe ist ungültig und führt zu einer erneuten Frage;

  • eine falsche Antwort ist eine gültige Eingabe und erhält Feedback.

Das Quiz darf nicht so lange fragen, bis die Antwort richtig ist. Das würde die Punkteregel ändern und verhindern, dass eine falsche Antwort als Versuch zählt.

Was unterscheidet eine leere Antwort von einer falschen, nicht leeren Antwort?

Aufgabe

Implementiere ask_question(question).

  1. Rufe read_nonempty_answer mit dem Fragetext der Frage und einem anschließenden Leerzeichen auf.

  2. Rufe response_result(question, given) mit der zurückgegebenen Antwort auf.

  3. Gib die zurückgegebene Meldung aus.

  4. Gib den zurückgegebenen booleschen Wert aus "correct" zurück.

Behalte jede frühere Funktion bei. Submit prüft richtige und falsche Antworten, erneute Versuche nach leeren Eingaben und die zwischen deinen Hilfsfunktionen übergebenen Werte.

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

sample_question = {"prompt": "Name a tree?", "answer": "maple"}
print(ask_question(sample_question))

Probiere eine leere Antwort gefolgt von MAPLE aus und starte das Programm dann erneut mit oak. Bei der leeren Antwort wird erneut gefragt, während die nicht leere falsche Antwort die Frage abschließt und False zurückgibt.

Entferne beide vorübergehenden Zeilen (die Zuweisung an sample_question und den Aufruf von print()) vor Submit und bevor du fortfährst. Behalte die nicht interaktiven Zusicherungen bei. Sie prüfen die Hilfsfunktionen, ohne nach Eingaben zu fragen.