Deine ersten Klassen und Objekte · Abschlussprojekt
Abschlussprojekt: Projekt: Ersetze Quiz-Dictionarys durch Objekte
Dieses Kapitel begann mit Frage-Dictionarys, die versehentlich falsche Schlüssel verwenden konnten. Schritt für Schritt hast du eine Klasse Question definiert, initialisierte Instanzen erstellt, die Antwortprüfung in eine Methode verschoben und ein Quiz mit einer Sammlung von Fragen arbeiten lassen.
Das Projekt verbindet diese Folge jetzt zu einem funktionierenden Quizmodell. Du baust:
eine Klasse
Question, die verlässliche Frageobjekte erstellt;eine Methode
is_correct, die für die Regel zum Antwortvergleich zuständig ist;eine Klasse
Quiz, die Fragen enthält;eine Methode
check_answer, die an eine Frage delegiert;eine Methode
score, die eine Folge eingegebener Antworten prüft.
Was die Klassen unterstützen müssen
Anderer Code sollte Fragen erstellen, ein Quiz bauen, eine Antwort prüfen und eine Punktzahl berechnen können:
questions = [
Question("Two plus two?", "4"),
Question("Three plus three?", "6"),
]
quiz = Quiz(questions)
assert quiz.check_answer(0, "4")
assert quiz.score(["4", "5"]) == 1
Du darfst hilfreiche lokale Variablen oder Methoden hinzufügen. Halte die gezeigten Konstruktorargumente und Methodennamen funktionsfähig, damit das Beispiel und die verdeckten Prüfungen die Klassen auf dieselbe Weise verwenden können.
Baue in kleinen Schritten
Vervollständige
Question.__init__.Vervollständige
Question.is_correct.Vervollständige
Quiz.__init__.Vervollständige
Quiz.check_answer.Vervollständige
Quiz.score.Führe das Programm aus und reiche es ein.
Quiz.score erhält eine eingegebene Antwort pro Frage. Es sollte die Anzahl richtiger Antworten zurückgeben.
Ein klarer Ansatz ist, einen Zähler bei null zu beginnen, passende Frage- und Antwortpositionen zu durchlaufen und eins zu addieren, wenn check_answer True zurückgibt.
Beurteile den Entwurf
Vergleiche das Projekt nach dem Bestehen mit der Dictionary-Version:
Welcher Aufbau kann über den normalen Konstruktor nicht mehr versehentlich entstehen?
Welches Objekt ist für die Antwortprüfung zuständig?
Was wurde leichter lesbar?
Welche zusätzliche Struktur haben die Klassen eingeführt?
Klassen sind wertvoll, wenn ihre klareren Zusagen diese Struktur rechtfertigen. Dieses Projekt gibt dir einen konkreten Entwurf zum Beurteilen statt einer Regel, dass Klassen immer besser seien.
Welche Verantwortlichkeit gehört am ehesten zu Question?
Aufgabe
Vervollständige die beiden Klassen so, dass das fertige Programm Folgendes ausgibt:
Score: 2/3
Reiche es ein, wenn deine Question-Objekte unabhängigen Zustand behalten, Quiz die Antwortprüfung delegiert und score sowohl für die vorgegebenen Daten als auch für andere Fragen funktioniert.