Je eerste klassen en objecten · eindproject
Eindproject: Project: vervang quizdictionaries door objecten
Dit hoofdstuk begon met vraagdictionaries die per ongeluk de verkeerde sleutels konden gebruiken. Stap voor stap definieerde je een klasse Question, maakte je geïnitialiseerde instanties, verplaatste je antwoordcontrole naar een methode en liet je een Quiz met een verzameling vragen werken.
Het project combineert die reeks nu tot één werkend quizmodel. Je bouwt:
een klasse
Questiondie betrouwbare vraagobjecten maakt;een methode
is_correctdie de antwoordvergelijkingsregel beheert;een klasse
Quizdie vragen bevat;een methode
check_answerdie het werk aan één vraag overdraagt;een methode
scoredie een reeks ingevoerde antwoorden controleert.
Wat de klassen moeten ondersteunen
Andere code moet vragen kunnen maken, een quiz kunnen bouwen, één antwoord kunnen controleren en een score kunnen berekenen:
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
Je mag nuttige lokale variabelen of methoden toevoegen. Houd de getoonde constructorargumenten en methodenamen werkend, zodat het voorbeeld en de afgeschermde controles de klassen op dezelfde manier kunnen gebruiken.
Bouw in kleine stappen
Maak
Question.__init__af.Maak
Question.is_correctaf.Maak
Quiz.__init__af.Maak
Quiz.check_answeraf.Maak
Quiz.scoreaf.Voer het programma uit en dien het in.
Quiz.score ontvangt één ingevoerd antwoord per vraag. De methode moet het aantal goede antwoorden teruggeven.
Een duidelijke aanpak is een teller bij nul laten beginnen, bij elkaar horende vraag- en antwoordposities doorlopen en één optellen wanneer check_answer de waarde True teruggeeft.
Bekijk het ontwerp
Vergelijk het project na een geslaagde beoordeling met de dictionaryversie:
Welke vorm kan niet meer per ongeluk via de normale constructor worden gemaakt?
Welk object beheert de antwoordcontrole?
Wat werd makkelijker te lezen?
Welke extra structuur introduceerden de klassen?
Klassen zijn waardevol wanneer hun duidelijkere beloften die structuur rechtvaardigen. Dit project geeft je een concreet ontwerp om te beoordelen in plaats van een regel dat klassen altijd beter zijn.
Welke verantwoordelijkheid hoort het natuurlijkst bij Question?
Opdracht
Maak de twee klassen af zodat het uiteindelijke programma dit afdrukt:
Score: 2/3
Dien in wanneer je objecten van Question een onafhankelijke toestand bewaren, Quiz de antwoordcontrole overdraagt en score werkt voor zowel de meegeleverde gegevens als andere vragen.