0%

Dictionaries en andere verzamelingen · eindproject

Eindproject: Project: bouw een doorzoekbare minicatalogus

Je hebt nu de onderdelen voor een klein gestructureerd informatiesysteem:

  • dictionaries voor records met benoemde velden;

  • een lijst voor meerdere records in volgorde;

  • lussen om elk record te verwerken;

  • functies voor gerichte bewerkingen;

  • een zoekfunctie die een dictionary of None teruggeeft;

  • invoer voor een echte zoekterm.

Je project combineert ze tot een doorzoekbare minicatalogus.

De catalogusrecords

De startcode bevat drie boeken. Behoud hun gegevens en vorm:

catalog = [
    {
        "title": "Kindred",
        "creator": "Octavia E. Butler",
        "year": 1979,
    },
    {
        "title": "A Wizard of Earthsea",
        "creator": "Ursula K. Le Guin",
        "year": 1968,
    },
    {
        "title": "Python Crash Course",
        "creator": "Eric Matthes",
        "year": 2023,
    },
]

Elk record heeft dezelfde verplichte sleutels. Je mag meer records toevoegen nadat het project is goedgekeurd, maar behoud deze drie zodat de voorbereide zoekopdracht beoordeeld kan worden.

format_item(item)

Geef één regel terug in precies deze vorm:

Kindred by Octavia E. Butler (1979)

De functie ontvangt één dictionary en geeft een string terug. Ze drukt niets af.

show_catalog(catalog)

Druk de kop af:

CATALOG

Druk daarna elk record af op een genummerde regel, beginnend bij 1:

1. Kindred by Octavia E. Butler (1979)

Roep format_item(item) aan voor de tekst na het nummer en houd naast de lus een teller bij voor het nummer zelf, zoals je sinds hoofdstuk 7 doet.

find_by_title(catalog, query)

Gebruik de afspraak uit “Doorzoek een lijst met records”:

  1. schoon de zoekterm op met .strip().lower();

  2. doorloop de records;

  3. vergelijk met elke titel in kleine letters;

  4. geef de overeenkomende dictionary terug;

  5. geef na de lus None terug als geen titel overeenkomt.

Het programma op het hoogste niveau

Na de functiedefinities en de catalogus:

  1. roep show_catalog(catalog) aan;

  2. vraag precies Search by title: ;

  3. roep find_by_title aan;

  4. druk No matching title. af als het resultaat None is;

  5. druk anders Found: af, gevolgd door format_item(match).

Submit geeft deze zoekterm mee:

  PYTHON CRASH COURSE

Door jouw opschoning moet die het derde record vinden zonder de opgeslagen titel te veranderen.

Bouw in drie rondes

1. Maak één record op

Maak format_item af. Roep de functie tijdelijk aan met catalog[0] en controleer de regel.

2. Toon alle records

Maak show_catalog af. Controleer de nummering, de volgorde van de records en de exacte leestekens.

3. Zoek

Maak find_by_title af en verbind daarna de invoer en de resultaattak. Probeer een bestaande titel met ongebruikelijke hoofdletters en daarna een ontbrekende titel.

Lees de uiteindelijke structuur

Het programma op het hoogste niveau moet kort zijn. Het zegt: tonen, vragen, zoeken en rapporteren. De functies bevatten de details, de lijst bewaart de volgorde en elke dictionary geeft één record betekenisvolle velden.

Dat is het belangrijkste resultaat van dit hoofdstuk: structuren kiezen die de informatie en de bewerkingen op elkaar laten aansluiten.

Hoofdstuk 10 gaat over de fouten die echte invoer en onvolmaakte gegevens kunnen veroorzaken. Je leert tracebacks lezen, valideren vóór het omzetten en specifieke verwachte fouten afhandelen zonder onverwachte fouten te verbergen.

Opdracht

Bouw de doorzoekbare minicatalogus die in de les is beschreven.

Eisen:

  1. Maak format_item(item) af zodat de functie title by creator (year) teruggeeft op basis van één dictionary.

  2. Maak show_catalog(catalog) af. Druk CATALOG af en daarna elk record op een genummerde regel, beginnend bij 1. Roep voor elk record format_item aan.

  3. Maak find_by_title(catalog, query) af. Schoon de zoekterm op, geef de overeenkomende dictionary terug of geef na de lus None terug.

  4. Behoud de drie records uit de startcode en hun exacte velden.

  5. Toon na de definities en gegevens de catalogus.

  6. Vraag precies Search by title: .

  7. Druk No matching title. af voor None, of Found: gevolgd door het opgemaakte overeenkomende record.

Submit gebruikt voorbereide invoer, dus je hoeft tijdens de beoordeling niets te typen.