Schleifenkontrollanweisungen
Python bietet mehrere Anweisungen, die den Ablauf innerhalb einer Schleife steuern. Damit legst du fest, wann eine Schleife endet, zur nächsten Iteration springt oder einen besonderen Abschluss ausführt.
Break Continue Pass und Else
Die break-Anweisung verlässt sofort die nächstgelegene Schleife, sobald eine Bedingung erfüllt ist. Danach läuft das Programm mit der ersten Anweisung hinter dieser Schleife weiter.
# Suche nach einer Zahl, die durch 15 und 25 teilbar ist
x = 0
while True:
x += 1
if not (x % 15 or x % 25):
break
print(x, 'ist durch 15 und 25 teilbar')
# Ausgabe: 75 ist durch 15 und 25 teilbarDie continue-Anweisung überspringt den Rest des Codes in der aktuellen Iteration und fährt mit der nächsten Iteration fort. Dies unterscheidet sich von break, das die gesamte Schleife stoppt.
# Es werden nur gerade Zahlen gedruckt
for i in range(1, 11):
if i % 2:
continue
print(i, 'ist gerade.')
# Ausgabe:
# 2 ist gerade.
# 4 ist gerade.
# 6 ist gerade.
# 8 ist gerade.
# 10 ist gerade.Die pass-Anweisung führt keine Aktion aus. Sie hält einen sonst leeren Block syntaktisch gültig, solange seine Implementierung noch fehlt.
# pass führt keine Aktion aus. Die Iteration wird nicht übersprungen
for i in range(1, 11):
if i == 6:
pass # Für die Zahl 6 nichts tun
if not i % 3:
print(i, 'ist durch 3 teilbar')
# Ausgabe:
# 3 ist durch 3 teilbar
# 6 ist durch 3 teilbar
# 9 ist durch 3 teilbarDer else-Block läuft, wenn die Schleife endet, ohne break auszuführen. In einer Suchschleife wird ein Treffer vor break und der Fall "nicht gefunden" im else-Block behandelt.
# Suche nach negativen Zahlen in der Liste
numbers = [0, 4, 2, 5]
for i in numbers:
if i < 0:
break
else:
print('Keine negative Zahl in der Liste')
# Ausgabe: Keine negative Zahl in der ListeFunktion Enumerate
Nutze enumerate(), wenn eine Iteration sowohl einen Zähler als auch den jeweiligen Wert benötigt. Die Funktion liefert einen Iterator, der Tupel der Form (Index, Wert) erzeugt.
# Mit enumerate Index und Wert abrufen
fruits = ['apple', 'banana', 'mango', 'melon']
for i, fruit in enumerate(fruits):
print(i, ':', fruit)
# Ausgabe:
# 0 : apple
# 1 : banana
# 2 : mango
# 3 : melonStandardmäßig beginnt enumerate() bei . Mit dem zweiten Argument legst du einen anderen Startwert fest.
# Benutzerdefinierten Startindex für enumerate festlegen
fruits = ['apple', 'banana', 'mango', 'melon']
for i, fruit in enumerate(fruits, 5):
print(i, ':', fruit)
# Ausgabe:
# 5 : apple
# 6 : banana
# 7 : mango
# 8 : melonIn for i, fruit in enumerate(fruits) bindet das Tuple-Unpacking bei jeder Iteration den Index an i und den zugehörigen Wert an fruit.
Schleife mit While
Die while-Schleife führt einen Block aus, solange ihre Bedingung truthy ist. Eine for-Schleife verbraucht ein Iterable, während while anhand einer Bedingung wiederholt, die der Schleifenrumpf normalerweise verändert.
# Beispiel einer While-Schleife mit mathematischer Berechnung
z = 1
while abs(z) < 100:
z = z**2 + 1
print(z)
# Ausgabe: 677Eine while-Schleife eignet sich für bedingungsgesteuerte Wiederholungen. Ihr Rumpf muss die Bedingung irgendwann verändern oder die Schleife ausdrücklich verlassen, sonst kann sie endlos laufen.
Funktion Zip
zip() verbindet jeweils die Werte an derselben Iterationsposition mehrerer Iterables zu einem Tupel. Die Iteration endet, sobald das kürzeste Iterable keine Elemente mehr liefert, die Zahl der Tupel entspricht also der Länge des kürzesten Eingabeobjekts.
Grundlegende Verwendung von Zip
# Zwei Listen mit Zip kombinieren
p = [1, 2, 3, 4]
q = ['a', 'b', 'c', 'd']
for pair in zip(p, q):
print(pair)
# Ausgabe:
# (1, 'a')
# (2, 'b')
# (3, 'c')
# (4, 'd')Die Funktion zip() liefert einen Iterator aus Tupeln. Jedes Tupel enthält die zusammengehörigen Elemente der Eingaben. Standardmäßig endet die Iteration mit dem kürzesten Iterable, sodass übrige Elemente längerer Eingaben nicht im Ergebnis stehen. Mit zip(..., strict=True) führen unterschiedliche Eingabelängen zu einem Fehler.
Ergebnisse von Zip konvertieren
Du kannst Paare aus einem zip()-Iterator direkt in einer Schleife lesen. Wandle ihn in eine Liste oder ein Tupel um, wenn du die Paare für eine erneute Verwendung speichern möchtest.
# Konvertieren von Zip-Ergebnissen in eine Liste oder ein Tupel
p = [1, 2, 3, 4]
q = ['a', 'b', 'c', 'd']
zipped = zip(p, q)
print(list(zipped)) # In Liste konvertieren
# Ausgabe: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
# Zip-Objekt bereits verbraucht, neues erstellen
zipped_new = zip(p, q)
print(tuple(zipped_new)) # In Tupel konvertieren
# Ausgabe: ((1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'))Entpacken mit dem Sternoperator
Mit dem Entpackoperator * lässt sich ein nichtleerer Satz gezippter Tupel wieder nach Positionen trennen.
# Mit zip verbundene Daten wieder trennen
pairs = [(1, 'a'), (2, 'b'), (3, 'd')]
numbers, letters = zip(*pairs)
print(numbers, letters)
# Ausgabe: (1, 2, 3) ('a', 'b', 'd')Dieser Vorgang wird als „Entpacken“ bezeichnet, da er die zusammengeführten Daten trennt.
Range und Schleife mit For
Die Funktion range() erzeugt eine Folge ganzer Zahlen für eine Iteration. Sie eignet sich für Schleifen mit numerischen Positionen oder einer festen Anzahl von Wiederholungen.
Bereichssyntax
# Verschiedene Möglichkeiten, range zu verwenden
# Bereich (Stopp) - von 0 bis Stop-1
for i in range(4):
print(i)
# Ausgabe:
# 0
# 1
# 2
# 3
print()
# Bereich (Start, Stopp) - von Start bis Stopp-1
for i in range(2, 6):
print(i)
# Ausgabe:
# 2
# 3
# 4
# 5
print()
# Bereich (Start, Stopp, Schritt) - mit spezifischem Schritt
for i in range(8, 4, -1):
print(i)
# Ausgabe:
# 8
# 7
# 6
# 5Der Bereich folgt einer arithmetischen Formel, bei der jedes i-te Element start + i * step für alle i von bis n-1 ist.
Effizienz von range und Listen
Ein range speichert Start, Ende und Schritt kompakt, statt jede ganze Zahl als Liste anzulegen. Die Werte werden bei Bedarf berechnet, sodass der Speicherbedarf nicht mit der Anzahl der dargestellten Zahlen wächst.
# Speicherbedarf von range und einer vollständigen Liste vergleichen
n = 10000
k = 10
# Materialisiert alle ganzen Zahlen im Speicher
index = list(range(n))
for i in index:
if i < k:
print(i)
else:
break
# Verwendet range ohne eine Liste zu erstellen
for i in range(n): # Speichert nicht alle Zahlen im Speicher
if i < k:
print(i)
else:
breakBedingte Anweisungen
Bedingte Anweisungen lassen ein Programm anhand ausgewerteter Bedingungen einen Zweig wählen. Einrückung gehört zur Python-Syntax. Verwende vier Leerzeichen pro Ebene und mische innerhalb eines Blocks keine Tabs und Leerzeichen.
Syntax mit If Elif und Else
# Vollständige if/elif/else-Struktur
age = 20
if age <= 5:
print("Freier Eintritt")
elif age <= 14:
print("15.00 EUR")
elif age <= 65:
print("30.00 EUR")
else:
print("20.00 EUR")
# Ausgabe: 30.00 EURBedingungen brauchen keine umschließenden Klammern, der Doppelpunkt hinter jedem Zweigkopf ist jedoch Pflicht. Alle Anweisungen eines Blocks benötigen eine einheitliche Einrückungsebene.
Verschachtelte Anweisung mit If
# Bestimmen des Quadranten aus dem Koordinatenpunkt
x = (-1, -3)
if x[0] == 0 or x[1] == 0:
print('auf einer Koordinatenachse')
elif x[0] > 0:
if x[1] > 0:
print('erster Quadrant')
else:
print('vierter Quadrant')
elif x[1] > 0:
print('zweiter Quadrant')
else:
print('dritter Quadrant')
# Ausgabe: dritter QuadrantNutze verschachtelte Entscheidungen, wenn der gewählte Zweig die nächste Prüfung bestimmt. Die erste Prüfung auf Nullkoordinaten verhindert, dass Punkte auf einer Achse einem Quadranten zugeordnet werden.
Syntax einer Schleife mit For
Eine for-Schleife durchläuft die Elemente eines iterierbaren Objekts wie einer Liste, eines Tupels, einer Zeichenfolge oder eines Bereichs.
# Beispiel einer Listeniteration
fruit_list = ['apple', 'banana', 'mango']
for fruit in fruit_list:
print(fruit)
# Ausgabe:
# apple
# banana
# mango
# Beispiel für eine String-Iteration
text = 'hi'
for char in text:
print(char)
# Ausgabe:
# h
# iEin Iterable liefert Werte nacheinander, ist aber nicht zwingend geordnet, indexierbar, wiederverwendbar oder endlich. Eine for-Schleife fordert fortlaufend Werte vom Iterator an. Im Kopf einer for-Schleife verbindet in das Schleifenziel mit dem Iterable. In einem Ausdruck wie 3 in [1, 3] prüft in die Mitgliedschaft.