0%

Daten umformen und verbinden · Übung

Prüfe Bedingungen über eine ganze Sammlung

sum, min und max haben in der vorigen Lektion numerische Fragen zu den Punktzahlen beantwortet. Andere Fragen zu einer Sammlung brauchen eine Antwort mit True oder False:

  • Hat irgendeine lernende Person die volle Punktzahl erreicht?

  • Haben alle Lernenden das Quiz abgeschlossen?

Python bietet any() und all() genau für diese Art von Prüfung:

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

Beide Funktionen erhalten eine Sammlung boolescher Werte. any gibt True zurück, wenn mindestens ein Wert wahr ist. all gibt dagegen nur dann True zurück, wenn jeder Wert wahr ist.

Erstelle die Bedingungen und fasse sie dann zusammen

Wir können jede Prüfung sichtbar machen:

perfect_checks = []

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

has_perfect = any(perfect_checks)

Später machen Comprehensions den Schritt zum Erstellen der Sammlung kürzer. Entscheidend ist hier die Frage, die any oder all stellt.

Leere Sammlungen

any([]) ist False: Kein Element erfüllt die Bedingung.

all([]) ist True: Es gibt kein Element, das die Bedingung verletzt. Das ist logisch schlüssig, entspricht aber möglicherweise nicht einer Produktregel wie „Alle Lernenden haben abgeschlossen“. Wenn eine leere Liste False melden soll, behandle sie ausdrücklich.

In dieser Lektion gibt completion_status([]) beide Ergebnisse als False zurück, weil es keine Versuche zum Zusammenfassen gibt.

Verwende if not attempt_list, um diese leere Eingabe vor dem Aufruf von all() zu behandeln.

Welcher Ausdruck beantwortet die Frage „War mindestens eine Prüfung erfolgreich?“

Berichte über perfekte und abgeschlossene Versuche

Ein Versuch ist abgeschlossen, wenn sein response nicht None ist. Erstelle die beiden booleschen Sammlungen und verwende dann any und all.

Aufgabe

Vervollständige completion_status.

  • Gib bei keinen Versuchen {"has_perfect": False, "all_complete": False} zurück.

  • Erstelle eine Liste von Prüfungen für score == total.

  • Erstelle eine Liste von Prüfungen für response is not None.

  • Verwende any für has_perfect.

  • Verwende all für all_complete.

Gib die beiden Ergebnisse in einem Dictionary zurück.