0%

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:

  1. toon de positie;

  2. roep de functie voor één vraag aan;

  3. tel alleen 1 op wanneer de teruggegeven booleaanse waarde True is.

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 score beginnen op 0.

  • Doorloop elk record in plan["questions"].

  • Druk vóór elke vraag een lege regel en Question POSITION of TOTAL af.

  • Roep ask_question aan voor dat record.

  • Tel alleen 1 op wanneer die functie True teruggeeft.

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