0%

Abschlussprojekt: Entwickle ein Quizprogramm · Übung

Verhindere leere Antworten

Die Auswertungslogik funktioniert mit festen Strings. Ergänze jetzt den ersten interaktiven Schritt: Lies eine nicht leere Antwort ein.

Halte diese Aufgabe in einer eigenen Funktion.

Nach dem Bereinigen leer ist immer noch leer

Sowohl "" (eine leere Antwort) als auch " " (drei Leerzeichen) sollen abgelehnt werden. Die Leerzeichen sind zwar Zeichen, aber .strip() entfernt sie und gibt "" zurück.

Eine Textantwort wie "0" ist nicht leer und soll akzeptiert werden. Diese Funktion prüft, ob eine Antwort vorhanden ist, nicht ob sie richtig ist.

Lege fest, was die Funktion zusichert

read_nonempty_answer(prompt):

  1. zeigt den übergebenen Eingabetext an;

  2. liest eine Antwort ein;

  3. entfernt umgebende Leerraumzeichen;

  4. gibt die bereinigte Antwort zurück, wenn sie nicht leer ist;

  5. gibt andernfalls "Please enter an answer." aus und wiederholt den Vorgang.

Die Funktion kennt die erwartete Quizantwort nicht. Sie setzt eine Eingaberegel durch, die für jede Frage gilt.

Verfolge den Weg bei einem erneuten Versuch

Für eine leere Antwort, auf die " maple " folgt:

VersuchBereinigter WertAktion
erster""Hinweis ausgeben und wiederholen
zweiter"maple""maple" zurückgeben

return beendet sowohl die Schleife als auch die Funktion. Ein zusätzliches break ist nicht erforderlich.

Sorge dafür, dass es weitergehen kann

Der Eingabetext und der Aufruf von input() müssen innerhalb der Schleife stehen. Jeder Weg nach einer ungültigen Eingabe muss zu einem weiteren Eingabeaufruf führen.

Die Plattform kann ein Programm stoppen, das scheinbar nicht endet. Der richtige Aufbau bleibt trotzdem eine Schleife mit einem erreichbaren Rückgabeweg.

Vergleiche hier noch keine Antworten

Es mag verlockend sein, dieser Funktion den Fragedatensatz zu übergeben und auch die Richtigkeit zu prüfen. Verzichte in diesem Meilenstein darauf.

Eine Funktion liest gültigen Text ein. Die nächste verbindet das Einlesen mit der Rückmeldung zur Antwort.

Was soll read_nonempty_answer() tun, wenn jemand drei Leerzeichen eingibt?

Aufgabe

Implementiere read_nonempty_answer(prompt).

  • Frage immer wieder mit dem übergebenen Eingabetext nach einer Antwort.

  • Entferne die umgebenden Leerraumzeichen des eingegebenen Texts.

  • Wenn die bereinigte Antwort leer ist, gib Please enter an answer. aus und wiederhole den Vorgang.

  • Gib die erste nicht leere, bereinigte Antwort zurück.

Behalte alle fertigen Funktionen aus den früheren Meilensteinen bei. Submit prüft mehrere Abläufe mit nicht leeren Antworten und erneuten Eingabeversuchen.

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

print(read_nonempty_answer("Practice answer: "))

Probiere eine leere Antwort, eine Antwort nur aus Leerzeichen und MiXeD aus. Bei den ersten beiden soll erneut gefragt werden; der zurückgegebene Text soll MiXeD sein. Probiere auch 0 aus: Das ist nicht leerer Text.

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.