0%

Van werkende code naar programmaontwerp · eindproject

Eindproject: Project: beschrijf een beter ontwerp

Dit project verbetert het ontwerp met bekende hulpmiddelen.

Het startprogramma gebruikt parallelle lijsten:

prompts = [
    "Two plus two?",
    "Three plus three?",
]
answers = ["4", "6"]
points = [1, 2]

Positie nul in elke lijst beschrijft één vraag. Positie één beschrijft een andere. Dat verband bestaat alleen in het begrip van de programmeur.

Als één lijst anders wordt geordend of één item wordt weggelaten, passen de records ongemerkt niet meer bij elkaar.

Je herontwerp met functies als uitgangspunt

Herstructureer het programma rond drie kleine publieke functies:

make_question(prompt, answer, points)
is_correct(question, response)
score_quiz(questions, responses)

De resulterende lijst moet volledige vraagdictionaries bevatten:

questions = [
    make_question("Two plus two?", "4", 1),
    make_question("Three plus three?", "6", 2),
]

score_quiz geeft het totale aantal behaalde punten terug. De functie moet het gedrag in is_correct gebruiken in plaats van de antwoordvergelijking te herhalen.

Houd de verantwoordelijkheden gericht

De vorige les introduceerde een verantwoordelijkheid als een belofte die één deel van het programma beheert. Dit ontwerp geeft elke functie er één:

  • make_question beheert het maken van een volledig record.

  • is_correct beheert de antwoordvergelijking.

  • score_quiz beheert de quizlus en het totaal.

De verantwoordelijkheid voor het aanmaken omvat de regels die al in dit hoofdstuk zijn vastgelegd: vraagteksten en antwoorden mogen niet leeg zijn en punten moeten minstens 1 zijn.

Deze structuur is beter dan de parallelle lijsten en kan alles zijn wat een bescheiden programma nodig heeft.

Bekijk wat er verbeterde

Vóór het herstructureren was het programma afhankelijk van overeenkomende posities in drie lijsten. Na het herstructureren:

  • is elke vraag één volledige waarde;

  • wordt elke vraag op dezelfde manier aangemaakt;

  • bevat één functie de regel voor antwoordvergelijking;

  • richt de quizlus zich op de scoreberekening.

Niets hiervan vereist onbekende syntaxis. Programmaontwerp begint vaak met bekende onderdelen zo ordenen dat hun taken duidelijk zijn.

Waarom is een lijst met volledige vraagdictionaries veiliger dan drie parallelle lijsten?

Beschrijf nadat je project is goedgekeurd in je eigen woorden één verbetering en één nadeel van het herstructureren. Die reflectie is bedoeld voor je ontwerpinzicht en is niet verborgen in de beoordelaar.

Opdracht

Vervang het ontwerp met parallelle lijsten door make_question, is_correct en score_quiz af te maken.

Eisen:

  • elke vraag is één dictionary met prompt, answer en points;

  • make_question wijst lege vraagteksten, lege antwoorden en punten onder 1 af met een ValueError;

  • de antwoordcontrole negeert spaties aan de buitenkant en hoofdletters;

  • score_quiz roept is_correct aan in plaats van de vergelijking te herhalen;

  • goede antwoorden voegen de punten van die vraag toe;

  • verkeerde antwoorden voegen nul toe.

Het meegeleverde programma moet Score: 3 afdrukken.