0%

Eindproject: bouw een quizprogramma · oefening

Geef nuttige feedback op één antwoord

De blauwdruk kan twee strings vergelijken, maar het uiteindelijke programma heeft een bruikbaar resultaat nodig voor één vraag en één ingevoerd antwoord.

Bouw dat gedrag voordat je input() of een lus toevoegt.

Leg een kleine afspraak vast

Gebruik één vraagrecord uit het quizplan:

question = {
    "prompt": "Which keyword ends a loop?",
    "answer": "break",
}

Een gerichte antwoordfunctie kan de vraag en een vast ingevoerd antwoord ontvangen:

result = response_result(question, " BREAK ")

Het resultaat moet twee samenhangende feiten bevatten:

  • of het ingevoerde antwoord goed was;

  • het feedbackbericht dat moet worden getoond.

Een dictionary maakt die velden expliciet:

{
    "correct": True,
    "message": "Correct!",
}

Bij een verkeerd antwoord is de booleaanse waarde False en kan het bericht het verwachte antwoord onthullen.

Waarom geef je gegevens terug in plaats van direct af te drukken?

Door een dictionary terug te geven, blijft deze functie in verschillende situaties bruikbaar:

  • de interactieve functie kan het bericht afdrukken;

  • de scorelus kan de booleaanse waarde bekijken;

  • een test kan beide velden controleren zonder terminaluitvoer vast te leggen.

De functie neemt één beslissing. Andere functies bepalen wanneer ze vragen stellen, iets tonen en de score bijwerken.

Hergebruik de vastgelegde vergelijkingsregel

Herhaal .strip().lower() niet in elke nieuwe functie. Roep answers_match() aan zodat de hele quiz één antwoordregel gebruikt.

Als de regel later verandert, blijft één gerichte hulpfunctie de centrale plek voor die regel.

Controleer nu beide paden

Gebruik vaste waarden:

assert response_result(question, "break")["correct"] is True
assert response_result(question, "continue")["correct"] is False

Deze mijlpaal blijft niet-interactief. Daardoor is de afspraak over het teruggegeven resultaat makkelijk te begrijpen voordat terminalinvoer nog een extra onderdeel toevoegt.

Waarom geeft response_result() een dictionary terug in plaats van zelf feedback af te drukken?

Opdracht

Implementeer de nieuwe functie response_result(question, given).

De functie moet answers_match(given, question["answer"]) aanroepen en dit teruggeven:

  • {"correct": True, "message": "Correct!"} bij een overeenkomst;

  • anders {"correct": False, "message": "Not quite. The answer is EXPECTED."}, met het werkelijke antwoord van de vraag.

Behoud je afgeronde blauwdrukfuncties en de twee voorbereide asserties. Deze mijlpaal gebruikt vaste antwoorden en roept geen input() aan.