0%

Eindproject: bouw een quizprogramma · oefening

Stel één volledige vraag

Je hebt nu drie onafhankelijke onderdelen:

  • read_nonempty_answer(prompt) haalt bruikbare tekst op;

  • response_result(question, given) controleert die tekst;

  • een vraagdictionary levert de vraagtekst en het verwachte antwoord.

Combineer ze in ask_question(question).

Bepaal wat de aanroeper ziet

De functie moet:

  1. de vraag tonen via read_nonempty_answer;

  2. het teruggegeven antwoord doorgeven aan response_result;

  3. het bericht uit het resultaat afdrukken;

  4. de booleaanse waarde uit het resultaat teruggeven.

De scorelus zal de functie uiteindelijk zo gebruiken:

was_correct = ask_question(question)

if was_correct:
    score += 1

De aanroeper heeft alleen een booleaanse waarde nodig. Die hoeft niet te weten hoeveel ongeldige pogingen er waren of hoe het bericht is opgebouwd.

Laat elke hulpfunctie haar verantwoordelijkheid behouden

Kopieer de herhaallus niet naar ask_question. Roep read_nonempty_answer aan.

Dupliceer het opschonen van antwoorden of het bouwen van berichten niet. Roep response_result aan.

Door onderdelen te combineren, blijft de nieuwe functie kort: het gedetailleerde werk heeft al namen.

Gebruik de vraagtekst van het record

Voeg één spatie aan het einde toe wanneer je de vraagtekst doorgeeft:

Capital of France? 

Zo blijft de cursor zichtbaar gescheiden van de vraag.

Test goede en verkeerde antwoorden

Eén aanroep moet een lege poging vóór een goed antwoord accepteren. Een andere moet een niet-leeg maar verkeerd antwoord direct accepteren.

Dit zijn verschillende situaties:

  • lege invoer is ongeldig en leidt tot opnieuw proberen;

  • een verkeerd antwoord is geldige invoer en krijgt feedback.

De quiz mag niet blijven vragen totdat het antwoord goed is. Dat zou de scoreregel veranderen en voorkomen dat een verkeerd antwoord als poging telt.

Wat is het verschil tussen een leeg antwoord en een verkeerd niet-leeg antwoord?

Opdracht

Implementeer ask_question(question).

  1. Roep read_nonempty_answer aan met de vraagtekst van de vraag, gevolgd door één spatie.

  2. Roep response_result(question, given) aan met het teruggegeven antwoord.

  3. Druk het teruggegeven bericht af.

  4. Geef de teruggegeven booleaanse waarde "correct" terug.

Behoud elke eerdere functie. Submit controleert goede en verkeerde antwoorden, nieuwe pogingen bij lege invoer en de waarden die tussen je hulpfuncties worden doorgegeven.

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

sample_question = {"prompt": "Name a tree?", "answer": "maple"}
print(ask_question(sample_question))

Probeer een leeg antwoord gevolgd door MAPLE en voer de code daarna opnieuw uit met oak. Het lege antwoord leidt tot opnieuw vragen, terwijl het niet-lege verkeerde antwoord de vraag afrondt en False teruggeeft.

Verwijder beide tijdelijke regels (de toewijzing aan sample_question en de aanroep van print()) vóór Submit en voordat je verdergaat. Behoud de niet-interactieve asserties; die controleren de hulpfuncties zonder om invoer te vragen.