0%

Gegevens bewerken en combineren · oefening

Controleer voorwaarden in een verzameling

sum, min en max beantwoordden in de vorige les numerieke vragen over scores. Andere vragen over een verzameling hebben een antwoord True of False nodig:

  • Heeft minstens één cursist een perfecte score behaald?

  • Hebben alle cursisten de quiz afgerond?

Python biedt any() en all() voor precies dit soort controles:

any([False, True, False])  # True
all([True, True, False])   # False

Beide functies ontvangen een verzameling booleaanse waarden. any geeft True terug wanneer minstens één waarde waar is, terwijl all alleen True teruggeeft wanneer elke waarde waar is.

Bouw de voorwaarden en vat ze daarna samen

We kunnen elke controle zichtbaar maken:

perfect_checks = []

for attempt in attempts:
    is_perfect = attempt["score"] == attempt["total"]
    perfect_checks.append(is_perfect)

has_perfect = any(perfect_checks)

Later maken comprehensions de stap voor het bouwen van de verzameling korter. Het belangrijkste idee hier is de vraag die any of all stelt.

Lege verzamelingen

any([]) is False: geen enkel item voldoet aan de voorwaarde.

all([]) is True: er is geen item dat de voorwaarde schendt. Dat is logisch consistent, maar past mogelijk niet bij een productregel zoals “alle cursisten hebben afgerond”. Handel het expliciet af als een lege lijst False moet opleveren.

In deze les geeft completion_status([]) voor beide resultaten False terug, omdat er geen pogingen zijn om samen te vatten.

Gebruik if not attempt_list om die lege invoer af te handelen voordat je all() aanroept.

Welke expressie beantwoordt de vraag “Is minstens één controle geslaagd?”

Rapporteer perfecte en afgeronde pogingen

Een poging is afgerond wanneer de response niet None is. Bouw de twee booleaanse verzamelingen en gebruik daarna any en all.

Opdracht

Maak completion_status af.

  • Geef {"has_perfect": False, "all_complete": False} terug als er geen pogingen zijn.

  • Bouw een lijst met controles voor score == total.

  • Bouw een lijst met controles voor response is not None.

  • Gebruik any voor has_perfect.

  • Gebruik all voor all_complete.

Geef de twee resultaten in een dictionary terug.