Daten umformen und verbinden · Übung
Fasse aussagekräftige Daten zusammen
Die vorige Lektion hat Versuchsdatensätze in eine nützliche Reihenfolge gebracht. Ein Programm braucht oft eine weitere Sicht auf dieselbe Sammlung: einige Angaben wie die Summe, die niedrigste und die höchste Punktzahl.
Wir könnten jede Angabe mit einer Schleife berechnen, aber Python bietet bereits gezielte Zusammenfassungsfunktionen für Zahlenwerte:
scores = [8, 6, 9]
sum(scores) # 23
min(scores) # 6
max(scores) # 9
Ihre Namen benennen das gewünschte Ergebnis direkt. So bleibt der Zweck der Berechnung sichtbar.
Wähle zuerst die passenden Daten aus
Ein Versuchsdatensatz enthält mehrere Zahlen:
{
"score": 8,
"total": 10,
"seconds": 75,
}
Übergib keine vollständigen Dictionarys an numerische Zusammenfassungsfunktionen. Sammle zuerst das Feld, das die Frage beantwortet:
scores = []
for attempt in attempts:
scores.append(attempt["score"])
Fasse dann scores zusammen.
Entscheide, was eine leere Sammlung bedeutet
sum([]) gibt 0 zurück, aber min([]) und max([]) lösen einen ValueError aus, weil es kein kleinstes oder größtes Element gibt.
Der Vertrag deiner Funktion muss eine Bedeutung festlegen. In dieser Lektion liefert eine leere Versuchsliste Folgendes zurück:
{
"total": 0,
"lowest": None,
"highest": None,
}
None macht ausdrücklich sichtbar, dass keine niedrigste oder höchste Punktzahl vorhanden ist.
Die leere Liste gilt als falsch, daher kann die Funktion sie direkt behandeln:
if not scores:
return {
"total": 0,
"lowest": None,
"highest": None,
}
Warum sollte lowest bei einer leeren Punkteliste None sein?
Fasse die Punktzahlen von Versuchen zusammen
Erstelle eine Liste mit Punktwerten. Gib die Summe, die niedrigste und die höchste Punktzahl zurück und verwende bei einer leeren Liste das dokumentierte Ergebnis.
Aufgabe
Vervollständige score_summary.
Sammle
scoreaus jedem Versuch.Gib für eine leere Liste
total: 0,lowest: Noneundhighest: Nonezurück.Verwende andernfalls
sum,minundmax.Gib ein neues Dictionary mit der Zusammenfassung zurück.
Verändere die Versuchsdatensätze nicht.