Die Standardbibliothek gibt es bereits · Übung
Mit statistics zusammenfassen
Die Übersicht weiß jetzt, wann Aktivitäten stattgefunden haben und wie viele zu jeder Kategorie gehören. Ihre dritte Aufgabe ist, die Dauer der Aktivitäten zu beschreiben.
„Durchschnitt“ ist für die Wahl einer API zu ungenau. Wir wollen zwei benannte Kennzahlen:
Der arithmetische Mittelwert addiert die Werte und teilt durch ihre Anzahl;
der Median ist nach dem Sortieren der mittlere Wert oder bei gerader Anzahl der Mittelwert der beiden mittleren Werte.
Das Modul statistics bietet beide Definitionen:
Die lange Aktivität von 80 Minuten zieht den Mittelwert nach oben. Der Median beantwortet eine andere Frage und bleibt zwischen den beiden mittleren Aktivitäten. Keines der Ergebnisse ist allgemein „der wahre Durchschnitt“. Der Bericht nennt beide, damit seine Leser den Unterschied sehen können.
Den Fall ohne Daten an der Projektgrenze entscheiden
Laut Dokumentation lösen mean([]) und median([]) einen StatisticsError aus. Das ist eine sinnvolle Vereinbarung für eine allgemeine Bibliothek: Keine universelle Zahl stellt die Mitte nicht vorhandener Daten dar.
In unserem Projekt gibt summarize_minutes([]) None zurück. Damit wird „Es gibt keine Zusammenfassung“ zu einem ausdrücklichen Wert, den build_briefing behandeln kann. Beachte die Aufgabenteilung:
statisticsist für die mathematischen Operationen zuständig;unsere Funktion entscheidet, was eine leere Aktivitätsliste in diesem Projekt bedeutet.
Fange nicht jede Ausnahme um die Bibliotheksaufrufe ab. Ein Datensatz ohne Schlüssel minutes oder mit ungeeigneten Daten ist ein anderer Fehler. Ihn zu verbergen würde die spätere Fehlerbehandlung erschweren.
Warum gibt das Projekt bei einer leeren Datensatzliste None zurück, bevor es mean oder median aufruft?
Ergänze die Zusammenfassungsfunktion in derselben Datei. Probiere sie sowohl mit einer ungeraden als auch mit einer geraden Anzahl von Aktivitäten aus, da der Median jeweils anders definiert ist. Probiere außerdem eine leere Liste aus, damit du dein None zurückbekommst.
Aufgabe
Implementiere summarize_minutes(records) in activity_report.py.
Gib sofort
Nonezurück, wennrecordsleer ist.Sammle andernfalls den Wert
minutesjedes Datensatzes.Gib ein Dictionary mit genau den Schlüsseln
meanundmedianzurück.Berechne diese Werte mit
statistics.meanundstatistics.median.
Behalte die von den Bibliotheksfunktionen zurückgegebenen Werte bei. Runde sie nicht und wandle sie nicht in Anzeigetext um; die Formatierung gehört zur fertigen Übersicht.