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
Noneteruggeeft;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”:
schoon de zoekterm op met
.strip().lower();doorloop de records;
vergelijk met elke titel in kleine letters;
geef de overeenkomende dictionary terug;
geef na de lus
Noneterug als geen titel overeenkomt.
Het programma op het hoogste niveau
Na de functiedefinities en de catalogus:
roep
show_catalog(catalog)aan;vraag precies
Search by title:;roep
find_by_titleaan;druk
No matching title.af als het resultaatNoneis;druk anders
Found:af, gevolgd doorformat_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:
Maak
format_item(item)af zodat de functietitle by creator (year)teruggeeft op basis van één dictionary.Maak
show_catalog(catalog)af. DrukCATALOGaf en daarna elk record op een genummerde regel, beginnend bij1. Roep voor elk recordformat_itemaan.Maak
find_by_title(catalog, query)af. Schoon de zoekterm op, geef de overeenkomende dictionary terug of geef na de lusNoneterug.Behoud de drie records uit de startcode en hun exacte velden.
Toon na de definities en gegevens de catalogus.
Vraag precies
Search by title:.Druk
No matching title.af voorNone, ofFound:gevolgd door het opgemaakte overeenkomende record.
Submit gebruikt voorbereide invoer, dus je hoeft tijdens de beoordeling niets te typen.