0%

Die Standardbibliothek gibt es bereits · Übung

Die Ausgabe bewusst ordnen

Die drei Funktionen auf Basis der Bibliothek liefern stabile Fakten zurück. Die Darstellung erfordert aber noch eine Entscheidung. Counter merkt sich die Reihenfolge, in der jede Kategorie zum ersten Mal vorkommt. Diese Eingaben ergeben daher gleiche Anzahlen mit unterschiedlicher Schlüsselreihenfolge:

first = [walk_record, read_record]
second = [read_record, walk_record]

Ein Bericht, der dieser Reihenfolge folgt, ändert sich, wenn die Datensätze umgeordnet werden. Dadurch entstehen unnötige Unterschiede in Tests, Vergleichen und später gespeicherten Daten.

Eine separate Liste sortieren

Erstelle eine Liste der Kategorieschlüssel des Counters und rufe dann deren Methode .sort() auf. Ohne Argument ordnet .sort() die Liste selbst in natürlicher Reihenfolge neu an: Strings werden hier alphabetisch sortiert.

Woran viele hängenbleiben, ist der Rückgabewert von .sort():

Try it

Die sortierte Liste ist names. Die Methode gibt None zurück. Diesen Rückgabewert zuzuweisen und dann darüber iterieren zu wollen ist deshalb ein häufiger Fehler.

Versuche nicht, den Counter direkt zu sortieren. Erstelle eine separate Namensliste, sortiere sie und formatiere dann in dieser Reihenfolge Teile der Form name=count. Zählen und Darstellung bleiben getrennte Aufgaben.

Wo steht nach names.sort() das alphabetisch sortierte Ergebnis?

Prüfe das direkt: Bringe die Datensätze von Hand in eine andere Reihenfolge, rufe die Formatierungsfunktion zweimal auf und bestätige, dass beide Aufrufe dieselbe Zeile zurückgeben. Wenn sich die Zeile mit der Eingabereihenfolge ändert, erfüllt die Sortierung ihre Aufgabe nicht.

Aufgabe

Implementiere format_category_counts(records) in activity_report.py.

  1. Rufe count_categories(records) auf.

  2. Erstelle eine separate Liste mit jedem Kategorieschlüssel des Counters.

  3. Rufe .sort() auf dieser Liste auf.

  4. Baue Teile der Form name=count in der sortierten Reihenfolge auf.

  5. Gib die mit , verbundenen Teile zurück.

Bei einer leeren Datensatzliste soll auf natürliche Weise der leere String zurückgegeben werden. Baue keine Beispielkategorien fest ein und verlasse dich nicht auf die Reihenfolge, in der Datensätze auftreten.