0%

Gegevens bewerken en combineren · oefening

Vat betekenisvolle gegevens samen

De vorige les zette pogingrecords in een nuttige volgorde. Een programma heeft vaak een andere kijk op dezelfde verzameling nodig: enkele feiten zoals het totaal, de laagste en de hoogste score.

We kunnen elk feit met een lus berekenen, maar Python biedt al gerichte samenvattingsfuncties voor numerieke waarden:

scores = [8, 6, 9]

sum(scores)  # 23
min(scores)  # 6
max(scores)  # 9

Hun namen benoemen het gevraagde resultaat direct, zodat het doel van de berekening zichtbaar blijft.

Selecteer eerst betekenisvolle gegevens

Een pogingrecord bevat meerdere getallen:

{
    "score": 8,
    "total": 10,
    "seconds": 75,
}

Geef geen volledige dictionaries door aan numerieke samenvattingsfuncties. Verzamel eerst het veld dat de vraag beantwoordt:

scores = []
for attempt in attempts:
    scores.append(attempt["score"])

Vat daarna scores samen.

Bepaal wat een lege verzameling betekent

sum([]) geeft 0 terug, maar min([]) en max([]) veroorzaken een ValueError, omdat er geen kleinste of grootste item is.

De afspraak van je functie moet een betekenis kiezen. In deze les geeft een lege pogingenlijst het volgende terug:

{
    "total": 0,
    "lowest": None,
    "highest": None,
}

None maakt de afwezigheid van een laagste of hoogste score expliciet.

De lege lijst is falsy, dus de functie kan die direct afhandelen:

if not scores:
    return {
        "total": 0,
        "lowest": None,
        "highest": None,
    }

Waarom moet lowest voor een lege scorelijst gelijk zijn aan None?

Vat scores van pogingen samen

Bouw één lijst met scorewaarden. Geef het totaal, de laagste en de hoogste score terug, met het vastgelegde resultaat voor een lege lijst.

Opdracht

Maak score_summary af.

  • Verzamel de score van elke poging.

  • Geef voor een lege lijst total: 0, lowest: None en highest: None terug.

  • Gebruik anders sum, min en max.

  • Geef een nieuwe samenvattingsdictionary terug.

Verander de pogingrecords niet.