Lektionen des Moduls (1/4)
for-Schleifen und range
Die for-Schleife in Python wird verwendet, um über eine Sequenz von Elementen zu
iterieren: eine Liste, einen String, eine Range, ein Dictionary... alles, was "iterable"
ist.
parole = ["ciao", "mondo", "!"]
for p in parole:
print(p)
# ciao
# mondo
# !Das Muster ist immer dasselbe: for <variable> in <iterable>: gefolgt von dem
eingerückten Block, der einmal für jedes Element ausgeführt wird.
range(...): Erzeugen ganzzahliger Intervalle
range erzeugt eine Lazy-Sequenz von Integern. Drei Formen:
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8 (step)
range(5, 0, -1) # 5, 4, 3, 2, 1 (negative step)range ist am rechten Ende exklusiv, wie slice. Es ist ein Lazy-Objekt: es
reserviert keinen Speicher für alle Zahlen, sondern erzeugt sie einzeln nacheinander.
totale = 0
for i in range(1, 11):
totale = totale + i
totale # 55 (1+2+...+10)Iterieren mit einem Index: enumerate
Wenn du das Element und seinen Index zusammen benötigst, verwende enumerate:
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
print(i, p)
# 0 ciao
# 1 mondo
# 2 !enumerate erzeugt Paare (index, value), die wir direkt zwei Variablen über das
Entpacken von Tupeln zuweisen.
Iterieren von zwei Sequenzen in Parallelität: zip
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
print(f"{n} ha {a} anni")zip stoppt bei der kürzesten Sequenz.
range() und Pythons Trägheit (Laziness)
In Python reserviert die Funktion range() keine tatsächliche Liste im Speicher: Sie gibt einen Lazy Generator zurück, der Zahlen bei Bedarf einzeln liefert (z.B. in einer for-Schleife). Dies ermöglicht die Iteration über Millionen von Integern, ohne den RAM zu überlasten. Um Range-Werte als Liste zu untersuchen, kannst du sie explizit mit list(range(5)) konvertieren.
Probiere es aus
Berechne die Summe der Zahlen von 1 bis 100 (inklusive) unter Verwendung einer for-Schleife über range(...), weise die Summe `total` zu und evaluiere sie.
Hinweis anzeigen
range(1, 101) erzeugt 1, 2, ..., 100 (exklusiv auf der rechten Seite).
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Gegeben sei die Liste `words = ['uno', 'due', 'tre']`. Baue eine Liste `pairs` von Strings wie '0:uno', '1:due', '2:tre' unter Verwendung von enumerate auf. Evaluiere `pairs`.
Hinweis anzeigen
enumerate(words) gibt bei jeder Iteration (index, value) zurück.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Berechne die Summe aller geraden Zahlen von 2 bis einschließlich 20 unter Verwendung einer `for`-Schleife über eine `range`. Speichere die Gesamtsumme in `even_sum` und evaluiere sie.
Hinweis anzeigen
Verwende range(2, 21, 2), um nur über gerade Ganzzahlen von 2 bis 20 zu iterieren.
Lösung nach 3 Versuchen verfügbar