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
anyvoorhas_perfect.Gebruik
allvoorall_complete.
Geef de twee resultaten in een dictionary terug.