De geldige toestand van objecten bewaken · eindproject
Eindproject: Project: vragen en pogingen die geldig blijven
Dit hoofdstuk begon met een Question die er zonder bezwaar mee instemde dat een leeg antwoord juist was. Het eindigt met twee klassen waarvan de publieke bewerkingen de gekozen regels in stand houden.
Het project brengt de vier hulpmiddelen samen in één klein programma.
Wat je tot je beschikking hebt
| Hulpmiddel | Gebruik het wanneer |
|---|---|
Validatie in __init__ | Een object met deze waarde nooit bruikbaar kan zijn. |
| Een methode genoemd naar een gebeurtenis | Er iets is gebeurd waaruit wijzigingen in meerdere attributen volgen. |
| Een alleen-lezen property | Aanroepers een gegeven over het object nodig hebben, geen toegang tot de opslag. |
| Een property met een setter | Er echt opnieuw aan één attribuut wordt toegewezen en dat attribuut een regel heeft. |
Elk van de vier komt minstens één keer voor in het voltooide programma. Beslissen welk hulpmiddel waar hoort, is de opdracht.
Het programma
Je bouwt de twee klassen die een quizsessie nodig heeft.
Een Question bevat een vraagtekst, een antwoord en een puntenwaarde. Het weigert te bestaan zonder alle drie. De points kunnen later worden aangepast, maar nooit naar nul of lager.
Een Attempt hoort bij één cursist met een naam. Het neemt antwoorden op via record, de enige manier waarop de resultaten ooit veranderen. Het rapporteert score, response_count en accuracy zonder dat iemand daaraan kan toewijzen. Zodra het is afgerond, accepteert het geen antwoorden meer en geeft het dat aan.
De startcode bevat de opzet van beide klassen, een kort aansturend programma en de resultaten die het moet opleveren.
Een Attempt moet beschikbaar maken hoeveel punten de cursist heeft verdiend. Welk hulpmiddel past daarbij?
Afronden
Een nuttige laatste controle voordat je je oplossing indient: vraag je bij elk attribuut in beide klassen af wat er zou gebeuren als een aanroeper er nu aan zou toewijzen. Als het eerlijke antwoord is ‘het object zou onjuiste informatie geven’, is dat attribuut nog niet af.
Als de controles slagen, kun je het aansturende programma naar je hand zetten door de voorbeeldvragen en de naam van de cursist te vervangen door een korte quiz die je echt aan iemand zou voorleggen. De controles kijken naar het gedrag van de objecten, niet naar het onderwerp van de sessie.
Opdracht
Maak beide klassen af zodat geen van beide in een toestand kan worden gebracht die niet is toegestaan.
Question moet het aanmaken weigeren tenzij de vraagtekst en het antwoord niet-leeg zijn en de punten groter zijn dan nul, door ValueError op te gooien. De prompt en answer zijn alleen leesbaar. De points zijn leesbaar en toewijsbaar en weigeren nul of lager.
Attempt houdt een publieke naam learner bij. Het maakt finished en de drie berekende waarden score, response_count en accuracy beschikbaar als alleen-lezen properties. record(question, response) slaat het antwoord en de verdiende punten op. Het achteraf wijzigen van de punten van de vraag mag die eerder verdiende punten niet veranderen. finish() beëindigt de poging, waarna record niets meer verandert.
Klik op Submit zodra het aansturende programma het rapport onderaan afdrukt en elke geweigerde wijziging de objecten precies laat zoals ze waren.