Eindproject: bouw een quizprogramma · oefening
Doorloop de quiz en houd de score bij
Eén volledige vraag werkt. De volgende laag verwerkt de lijst.
run_questions(plan) moet elke vraag stellen en de eindscore teruggeven.
Begin met de score
De variabele die de score bijhoudt, begint op nul:
score = 0
Voor elke vraag:
toon de positie;
roep de functie voor één vraag aan;
tel alleen 1 op wanneer de teruggegeven booleaanse waarde
Trueis.
Geef de score na de lus terug.
Toon posities die prettig leesbaar zijn
De lijst geeft je elke vraag op haar beurt, maar niets in een for-lus vertelt je bij welk nummer je bent. De speler moet posities zien die vanaf 1 tellen.
Je hebt daar al een hulpmiddel voor. Het is de teller uit hoofdstuk 7, met dezelfde drie onderdelen als elke variabele die een totaal bijhoudt:
total = len(questions)
number = 1
for question in questions:
print(f"Question {number} of {total}")
number += 1
number begint vóór de lus, verandert één keer per ronde en wordt binnen het blok gebruikt. Door total vóór de lus te bepalen, krijgt elke vraag hetzelfde totaal. Als de lijst leeg is, toont de lus geen vragen en blijft de score nul.
Houd de scoreberekening buiten ask_question
ask_question handelt één vraag af en geeft een booleaanse waarde terug. De functie moet niet een globale score benaderen.
De lus beheert de score, omdat die weet wanneer een volledige quiz begint en eindigt.
Dit ontwerp maakt de functie voor één vraag herbruikbaar. Een toekomstige oefenmodus zou haar kunnen aanroepen zonder een score bij te houden.
Geef terug voordat je rapporteert
Deze mijlpaal geeft de score als geheel getal terug, maar drukt het eindrapport nog niet af.
Dankzij die scheiding kun je dit controleren:
score = run_questions(plan)
assert score == 2
De volgende mijlpaal bepaalt hoe het getal wordt gepresenteerd.
Test een gemengd pad
Een nuttige uitvoering met drie vragen bevat:
één goed antwoord;
één verkeerd antwoord;
één goed antwoord met andere hoofdletters of spaties aan de buitenkant.
De verwachte score is 2. Dit controleert het optellen, beide feedbackpaden en de gedeelde opschoningsregel.
De antwoorden leveren True, False en True op. Welke score moet de lus teruggeven?
Opdracht
Implementeer run_questions(plan).
Laat
scorebeginnen op0.Doorloop elk record in
plan["questions"].Druk vóór elke vraag een lege regel en
Question POSITION of TOTALaf.Roep
ask_questionaan voor dat record.Tel alleen 1 op wanneer die functie
Trueteruggeeft.Geef na de lus de eindscore terug.
Behoud alle eerdere functies. Submit controleert verschillende aantallen vragen en combinaties van goede en verkeerde antwoorden.
Voeg om deze functie met Run te proberen tijdelijk deze aanroep toe onder de definities en bestaande asserties:
print(run_questions(build_quiz_plan()))
Gebruik je eigen vragen voor een uitvoering met alle antwoorden goed en een gemengde uitvoering. Controleer de nummering en vergelijk de teruggegeven score met je handmatige telling.
Verwijder de tijdelijke aanroep vóór Submit en voordat je verdergaat. Behoud de niet-interactieve asserties; die controleren de hulpfuncties zonder om invoer te vragen.