Python Lernhandbuch

Kapitel 5: Verzweigungen und Schleifen

Musterlösung mit Erklärung

Deine Lösung hat die Prüfung noch nicht bestanden. Lies die Erklärung, dann versuche es erneut – möglichst ohne abzuschreiben.
Aufgabe noch einmal lesen

Gegeben sind Bestellungen:

python
bestellungen = [
    {'kunde': 'Anna', 'betrag': 120.0, 'bezahlt': True},
    {'kunde': 'Ben', 'betrag': 45.5, 'bezahlt': False},
    {'kunde': 'Anna', 'betrag': 30.0, 'bezahlt': True},
    {'kunde': 'Cem', 'betrag': 210.0, 'bezahlt': False},
]

Berechne:

  1. Die Summe aller bezahlten Beträge.
  2. Die Namen der Kunden mit mindestens einer unbezahlten Bestellung (ohne Duplikate, alphabetisch sortiert).
  3. Den Gesamtumsatz pro Kunde als Dictionary.
  4. Gib die Bestellungen nummeriert aus, beginnend bei 1, mit Betrag auf zwei Nachkommastellen.
python
# 1: bezahlte Summe
bezahlt_summe = sum(b['betrag'] for b in bestellungen if b['bezahlt'])

# 2: Kunden mit offenen Bestellungen
offen = sorted({b['kunde'] for b in bestellungen if not b['bezahlt']})

# 3: Umsatz pro Kunde
umsatz = {}
for b in bestellungen:
    umsatz[b['kunde']] = umsatz.get(b['kunde'], 0) + b['betrag']

# 4: nummerierte Ausgabe
for nr, b in enumerate(bestellungen, start=1):
    print(f'{nr}. {b["kunde"]:<6}{b["betrag"]:>8.2f}')

print(bezahlt_summe)   # 150.0
print(offen)           # ['Ben', 'Cem']
print(umsatz)          # {'Anna': 150.0, 'Ben': 45.5, 'Cem': 210.0}

Was passiert:

  • Zu 1: Der Generator-Ausdruck läuft über alle Bestellungen, filtert mit if b['bezahlt'] und liefert die Beträge an sum.
  • Zu 2: {... for ...} mit geschweiften Klammern ergibt eine Menge, die Duplikate entfernt (Ben käme sonst bei mehreren offenen Bestellungen mehrfach vor). sorted macht daraus eine alphabetische Liste.
  • Zu 3: Dasselbe Zählermuster wie in Kapitel 4, nur wird der Betrag statt 1 addiert.
  • Zu 4: enumerate(..., start=1) liefert Nummer und Bestellung. Im f-String steht b["kunde"] mit doppelten Anführungszeichen, weil der f-String selbst in einfachen steht.

Warum so: Comprehensions sind kürzer und zeigen die Absicht ("Summe der bezahlten Beträge"). Eine normale Schleife wie bei Punkt 3 ist besser, wenn mehr passiert als ein Filtern oder Umwandeln.