0%

Kapitel 12 · Übung

Abschlussprojekt: Entwickle ein Quizprogramm

Übertrage deinen Bauplan in den Arbeitsbereich

Dieses Kapitel unterscheidet sich von den bisherigen. Du entwickelst über mehrere Lektionen hinweg ein einziges Programm.

Der Editor bearbeitet jetzt main.py in einem dauerhaften Arbeitsbereich für dieses Kapitel. Wenn du einen Meilenstein abschließt, bleiben deine funktionierenden Funktionen in dieser Datei erhalten. Die nächste Lektion ergänzt eine neue Funktion, die du implementierst, ohne die bereits fertiggestellten Funktionen zu ersetzen.

Beginne mit deinem Bauplan aus Kapitel 11

Dein Bauplan enthielt:

  • einen Quiztitel;

  • mindestens drei Dictionaries mit Fragen;

  • clean_answer(text);

  • answers_match(given, expected);

  • eine Prüfung, ob der Plan einsatzbereit ist.

Übernimm diese Entscheidungen, statt ein neues Thema auszuwählen.

Es gibt eine kleine Änderung am Aufbau. Speichere den Plan innerhalb einer Funktion:

def build_quiz_plan():
    return {
        "title": "Nature Quiz",
        "questions": [
            {
                "prompt": "Which animal builds a dam?",
                "answer": "beaver",
            },
        ],
    }

Das Beispiel ist bewusst klein gehalten. Deine Funktion enthält den vollständigen, selbst gestalteten Plan aus Kapitel 11. Entscheidend ist, dass sie diese Daten bei jedem Programmstart erneut erstellen und zurückgeben kann.

Warum stehen die Daten in einer Funktion?

Der Arbeitsbereich übernimmt abgeschlossene Funktionsdefinitionen auf der obersten Programmebene in jeden neuen Meilenstein. Wenn deine eigenen Daten in build_quiz_plan() stehen, werden dein gewählter Titel, deine Fragen und deine Antworten zusammen mit dieser Definition übernommen.

Die Funktion gibt dem restlichen Programm einen klaren Aufruf für den Einstieg:

plan = build_quiz_plan()

Der aufrufende Code muss nicht wissen, wie die Datensätze geschrieben wurden.

Verwende einen einheitlichen Aufbau für die Fragen

Jede Frage muss genau Folgendes enthalten:

{
    "prompt": "Question shown to the player",
    "answer": "Expected answer",
}

Durch diesen einheitlichen Aufbau können spätere Funktionen für jeden Datensatz dieselben zwei Schlüssel verwenden.

Prüfe die selbst erstellten Daten

plan_is_ready(plan) schützt die späteren Meilensteine vor einem unvollständigen Bauplan. Die Funktion soll Folgendes ablehnen:

  • einen leeren Titel;

  • weniger als drei Fragen;

  • einen Datensatz mit fehlenden, zusätzlichen oder leeren Feldern;

  • Fragetexte, die nach dem Bereinigen doppelt vorkommen.

Gehe davon aus, dass der äußere Plan einen String unter "title" und eine Liste von Dictionaries unter "questions" enthält. Vorhandene Werte für Fragetexte und Antworten sind Strings. Prüfe die oben genannten Regeln für Inhalt und Datensatzaufbau. Dies ist keine Validierung für jeden denkbaren Python-Wert.

Diese Funktion prüft die Daten, die du selbst erstellt hast. Sie ist von der Prüfung der eingegebenen Antworten getrennt, die du später entwickelst.

Ein dauerhaftes Projekt verändert den Arbeitsablauf

Bevor du deine Lösung einreichst:

  1. führe die gezielten Zusicherungen aus;

  2. prüfe, ob dein eigener Titel und deine Fragen noch vorhanden sind;

  3. reiche die vollständige Datei main.py ein;

  4. fahre erst fort, wenn der Meilenstein bestanden ist.

Reset stellt den Code wieder her, der beim Öffnen dieser Lektion bereitgestellt wurde, einschließlich der aus früheren Lektionen übernommenen Funktionen. Änderungen seit diesem Ausgangspunkt werden verworfen. Wenn du den gesamten Arbeitsbereich des Kapitels zurücksetzt, werden die angesammelten Projektdateien gelöscht und die Ausgangsdateien des Kapitels wiederhergestellt. Bereits bestandene Lektionen bleiben abgeschlossen. Verwende dieses umfassendere Zurücksetzen nur, wenn du das Projekt neu aufbauen möchtest.

Was erhält der restliche Programmcode durch den Aufruf von build_quiz_plan()?

Aufgabe

Übertrage deinen Bauplan aus Kapitel 11 in main.py.

  1. Ersetze den Platzhaltertitel und die Fragedatensätze in build_quiz_plan() durch dein gewähltes Thema und mindestens drei sachlich richtige Fragen.

  2. Implementiere clean_answer(text) so, dass die Funktion umgebende Leerraumzeichen entfernt und Groß- und Kleinschreibung nicht berücksichtigt.

  3. Implementiere answers_match(given, expected) mithilfe von clean_answer.

  4. Implementiere plan_is_ready(plan) mit allen in der Lektion festgelegten Bedingungen für einen einsatzbereiten Plan.

  5. Behalte die vorbereiteten Zusicherungen bei.

Wenn dein Bauplan aus Kapitel 11 in einem anderen Tab geöffnet ist, kopiere daraus den Titel und die Fragedatensätze, statt dir ein zweites Quiz auszudenken.