0%

Eindproject: bouw een quizprogramma · oefening

Presenteer het eindresultaat

Het quizprogramma kan nu een score teruggeven. Geef de volledige uitvoering een begin en een einde.

Voeg twee gerichte functies toe:

  • score_message(score, total) maakt één resultaatregel op;

  • run_quiz(plan) presenteert de titel, voert de vragen uit, drukt het eindrapport af en geeft de score terug.

Maak tekst op vanuit waarden

Een scorebericht moet voor elke quizlengte werken:

def score_message(score, total):
    return f"{score} out of {total} correct."

De functie moet haar parameters gebruiken, geen vast totaal uit één voorbeeldplan.

Met score = 2 en total = 3 is het resultaat:

2 out of 3 correct.

Laat de aansturende functie als een verhaal lezen

Een functie op hoofdlijnen is het makkelijkst te lezen wanneer haar aanroepen de stappen beschrijven:

show the title
run all questions
show the final heading
show the score message
return the score

De gedetailleerde lus, invoervalidatie en antwoordvergelijking horen in de functies die je al hebt getest.

Geef ook na het afdrukken een waarde terug

run_quiz(plan) drukt de quizervaring voor de speler af, maar moet ook de eindscore teruggeven.

De teruggegeven waarde ondersteunt testen en later hergebruik. Afdrukken en teruggeven hebben verschillende doelen, zoals je in hoofdstuk 8 leerde.

Kies de witruimte bewust

Gebruik een lege regel vóór de eerste vraag en vóór FINAL SCORE. De vragenlus drukt zelf al een lege regel vooraf af, dus de aansturende functie hoeft daar geen extra regel toe te voegen.

De uitvoer moet eindigen met het scorebericht. Vermijd tijdelijke diagnostische afdrukken in de uiteindelijke quizervaring.

Test het volledige pad

Op dit punt steekt één testaanroep meerdere grenzen over:

run_quiz
  -> run_questions
      -> ask_question
          -> read_nonempty_answer
          -> response_result

Als het resultaat van begin tot eind niet klopt, gebruik dan de gerichte controles uit eerdere mijlpalen om te bepalen welke laag is misgegaan.

Waarom moet run_quiz(plan) de score teruggeven na het afdrukken van het eindrapport?

Opdracht

Voeg de uiteindelijke presentatielaag toe.

Implementeer score_message(score, total) zodat de functie dit teruggeeft:

SCORE out of TOTAL correct.

Implementeer run_quiz(plan) zodat de functie:

  1. QUIZ: TITLE afdrukt;

  2. run_questions(plan) aanroept;

  3. een lege regel en FINAL SCORE afdrukt;

  4. score_message(score, number_of_questions) afdrukt;

  5. de score als geheel getal teruggeeft.

Behoud alle eerdere functies. Submit controleert uiteenlopende scores en de waarden die tussen de presentatiefuncties worden doorgegeven.

Voeg om deze functie met Run te proberen tijdelijk deze aanroep toe onder de definities en bestaande asserties:

print(run_quiz(build_quiz_plan()))

Controleer de titel, feedback en het eindrapport. Deze tijdelijke afdruk toont de teruggegeven score nog één keer na het rapport, zodat je die kunt vergelijken.

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.