0%

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 Question die betrouwbare vraagobjecten maakt;

  • een methode is_correct die de antwoordvergelijkingsregel beheert;

  • een klasse Quiz die vragen bevat;

  • een methode check_answer die het werk aan één vraag overdraagt;

  • een methode score die 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

  1. Maak Question.__init__ af.

  2. Maak Question.is_correct af.

  3. Maak Quiz.__init__ af.

  4. Maak Quiz.check_answer af.

  5. Maak Quiz.score af.

  6. 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.