Hoofdstuk 12 · oefening
Eindproject: bouw een quizprogramma
Neem je blauwdruk over in de werkruimte
Dit hoofdstuk is anders dan de eerdere hoofdstukken. Je bouwt één programma verspreid over meerdere lessen.
De editor beheert nu main.py in een blijvende werkruimte voor dit hoofdstuk. Wanneer je een mijlpaal voltooit, blijven je werkende functies in dat bestand staan. De volgende les voegt een nieuwe functie toe die je gaat bouwen, zonder de functies die je al hebt afgerond te vervangen.
Begin met je blauwdruk uit hoofdstuk 11
Je blauwdruk bevatte:
een quiztitel;
minstens drie vraagdictionaries;
clean_answer(text);answers_match(given, expected);een gereedheidscontrole voor het plan.
Neem die keuzes mee in plaats van een nieuw onderwerp te kiezen.
Er is één kleine structurele wijziging. Bewaar het plan in een functie:
def build_quiz_plan():
return {
"title": "Nature Quiz",
"questions": [
{
"prompt": "Which animal builds a dam?",
"answer": "beaver",
},
],
}
Het voorbeeld is bewust klein; jouw functie behoudt het volledige persoonlijke plan uit hoofdstuk 11. Het belangrijke idee is dat de functie die gegevens opnieuw kan opbouwen en teruggeven wanneer het programma start.
Waarom zet je de gegevens in een functie?
De werkruimte neemt afgeronde functiedefinities op het hoogste niveau mee naar elke nieuwe mijlpaal. Door de persoonlijke gegevens in build_quiz_plan() te bewaren, reizen je gekozen titel, vragen en antwoorden mee met die definitie.
De functie geeft de rest van het programma een duidelijke startaanroep:
plan = build_quiz_plan()
De aanroeper hoeft niet te weten hoe de records zijn geschreven.
Houd één consistente vraagvorm aan
Elke vraag moet precies dit bevatten:
{
"prompt": "Question shown to the player",
"answer": "Expected answer",
}
Dankzij die consistentie kunnen latere functies voor elk record dezelfde twee sleutels gebruiken.
Valideer gegevens die de ontwikkelaar heeft geschreven
plan_is_ready(plan) beschermt de latere mijlpalen tegen een onvolledige blauwdruk. De functie moet het volgende afwijzen:
een lege titel;
minder dan drie vragen;
een record met ontbrekende, extra of lege velden;
vraagteksten die na het opschonen dubbel blijken.
Neem aan dat het buitenste plan een string "title" en een lijst "questions" met dictionaries heeft. Aanwezige waarden voor vraagtekst en antwoord zijn strings. Controleer de bovenstaande regels voor inhoud en recordvorm; dit is geen validator voor elke mogelijke Python-waarde.
Deze functie valideert de gegevens die jij hebt geschreven. Ze staat los van de validatie van echte antwoorden die je later bouwt.
Een blijvend project verandert het ritme
Voordat je indient:
voer de gerichte asserties uit;
bevestig dat je eigen titel en vragen nog aanwezig zijn;
dien het volledige
main.pyin;ga pas verder nadat de mijlpaal is goedgekeurd.
Reset herstelt de mijlpaalcode die je kreeg toen je deze les opende, inclusief eerdere functies die daarin waren meegenomen. Dit verwijdert wijzigingen sinds dat startpunt. De volledige hoofdstukwerkruimte resetten wist de opgebouwde projectbestanden en herstelt de startbestanden van het hoofdstuk, terwijl geslaagde lessen voltooid blijven. Gebruik die grotere reset alleen wanneer je het project opnieuw wilt opbouwen.
Wat geeft het aanroepen van build_quiz_plan() aan de rest van het programma?
Opdracht
Neem je blauwdruk uit hoofdstuk 11 over in main.py.
Vervang de tijdelijke titel en vraagrecords binnen
build_quiz_plan()door jouw gekozen onderwerp en minstens drie kloppende vragen.Implementeer
clean_answer(text)zodat de functie witruimte aan de buitenkant verwijdert en hoofdletters negeert.Implementeer
answers_match(given, expected)metclean_answer.Implementeer
plan_is_ready(plan)met de volledige gereedheidsafspraak uit de les.Behoud de voorbereide asserties.
Als je blauwdruk uit hoofdstuk 11 in een ander tabblad openstaat, kopieer dan de titel en vraagrecords in plaats van een tweede quiz te bedenken.