Dictionaries und andere Sammlungen · Abschlussprojekt
Abschlussprojekt: Projekt: Einen durchsuchbaren Minikatalog bauen
Du hast jetzt die Bausteine für ein kleines strukturiertes Informationssystem:
Dictionaries für Datensätze mit benannten Feldern;
eine Liste für mehrere Datensätze in einer Reihenfolge;
Schleifen zum Verarbeiten jedes Datensatzes;
Funktionen für klar umrissene Vorgänge;
eine Suchfunktion, die ein Dictionary oder
Nonezurückgibt;eine Eingabe für eine echte Suchanfrage.
Dein Projekt verbindet sie zu einem durchsuchbaren Minikatalog.
Die Katalogdatensätze
Der Startcode enthält drei Bücher. Behalte ihre Daten und ihre Struktur bei:
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,
},
]
Jeder Datensatz hat dieselben Pflichtschlüssel. Du kannst weitere Datensätze hinzufügen, nachdem du das Projekt bestanden hast. Behalte aber diese drei bei, damit die vorbereitete Suche bewertet werden kann.
format_item(item)
Gib eine Zeile in genau dieser Form zurück:
Kindred by Octavia E. Butler (1979)
Die Funktion erhält ein Dictionary und gibt einen String zurück. Sie gibt nichts aus.
show_catalog(catalog)
Gib die Überschrift aus:
CATALOG
Gib dann jeden Datensatz in einer nummerierten Zeile aus, beginnend bei 1:
1. Kindred by Octavia E. Butler (1979)
Rufe format_item(item) für den Text hinter der Nummer auf und führe für die Nummer selbst einen Zähler neben der Schleife, wie du es seit Kapitel 7 kennst.
find_by_title(catalog, query)
Verwende die Vereinbarung aus „Eine Liste von Datensätzen durchsuchen“:
bereinige die Suchanfrage mit
.strip().lower();durchlaufe die Datensätze in einer Schleife;
vergleiche mit jedem kleingeschriebenen Titel;
gib das passende Dictionary zurück;
gib nach der Schleife
Nonezurück, wenn kein Titel passt.
Das Programm auf der obersten Ebene
Nach den Funktionsdefinitionen und dem Katalog:
rufe
show_catalog(catalog)auf;frage genau
Search by title:ab;rufe
find_by_titleauf;gib
No matching title.aus, wenn das ErgebnisNoneist;gib andernfalls
Found:gefolgt vonformat_item(match)aus.
Submit liefert diese Suchanfrage:
PYTHON CRASH COURSE
Deine Bereinigung soll damit den dritten Datensatz finden, ohne den gespeicherten Titel zu verändern.
In drei Durchgängen bauen
1. Einen Datensatz formatieren
Vervollständige format_item. Rufe die Funktion vorübergehend mit catalog[0] auf und prüfe die Zeile.
2. Alle Datensätze anzeigen
Vervollständige show_catalog. Prüfe die Nummerierung, die Reihenfolge der Datensätze und die genaue Zeichensetzung.
3. Suchen
Vervollständige find_by_title und verbinde dann die Eingabe mit dem Ergebniszweig. Probiere einen vorhandenen Titel mit ungewöhnlicher Groß- und Kleinschreibung und danach einen nicht vorhandenen Titel.
Die fertige Struktur lesen
Das Programm auf der obersten Ebene sollte kurz sein. Es sagt: anzeigen, abfragen, suchen und berichten. Die Funktionen enthalten die Details, die Liste enthält die Reihenfolge, und jedes Dictionary gibt einem Datensatz aussagekräftige Felder.
Das ist das zentrale Ergebnis dieses Kapitels: Strukturen zu wählen, bei denen die Informationen und die Vorgänge zusammenpassen.
Kapitel 10 wendet sich den Fehlern zu, die echte Eingaben und unvollkommene Daten verursachen können. Du lernst, Tracebacks zu lesen, vor der Umwandlung zu validieren und bestimmte erwartete Fehler zu behandeln, ohne unerwartete zu verbergen.
Aufgabe
Baue den in der Lektion beschriebenen durchsuchbaren Minikatalog.
Anforderungen:
Vervollständige
format_item(item)so, dass die Funktiontitle by creator (year)aus einem Dictionary zurückgibt.Vervollständige
show_catalog(catalog). GibCATALOGaus und dann jeden Datensatz in einer nummerierten Zeile, beginnend bei1. Rufe für jeden Datensatzformat_itemauf.Vervollständige
find_by_title(catalog, query). Bereinige die Suchanfrage, gib das passende Dictionary zurück oder gib nach der SchleifeNonezurück.Behalte die drei Datensätze aus dem Startcode und ihre genauen Felder bei.
Zeige nach den Definitionen und Daten den Katalog an.
Frage genau
Search by title:ab.Gib bei
Noneden TextNo matching title.aus, andernfallsFound:gefolgt vom formatierten passenden Datensatz.
Submit verwendet vorbereitete Eingaben, deshalb musst du während der Bewertung nichts eintippen.