Lektionen des Moduls (3/4)
break, continue und else in Schleifen
Innerhalb einer Schleife (sowohl for als auch while) kannst du den normalen
Ablauf mit drei Konstrukten ändern:
break— beendet die Schleife sofort.continue— überspringt den Rest des Schleifenkörpers und springt zur nächsten Iteration.else(an der Schleife) — wird ausgeführt, wenn die Schleife ohne einbreakendet.
break
for n in [3, 7, 11, 4, 9]:
if n % 2 == 0:
primo_pari = n
break
primo_pari # 4break stoppt die Schleife so schnell wie möglich. Alles nach break im Körper
der aktuellen Iteration wird NICHT ausgeführt.
continue
risultati = []
for n in range(1, 11):
if n % 2 == 0:
continue # skip evens
risultati.append(n * n)
risultati # [1, 9, 25, 49, 81]Stelle dir continue vor als "gehe zur nächsten Iteration". Es wird verwendet, um Elemente
zu filtern, ohne eine zusätzliche Einrückungsebene hinzuzufügen.
else an der Schleife (Python-Idiom)
Eine Python-Besonderheit: Schleifen können auch ein else haben, das nur ausgeführt wird, wenn die
Schleife natürlich (ohne break) beendet wurde. Es ist perfekt für Suchen:
target = 7
for n in [2, 4, 6, 8]:
if n == target:
trovato = True
break
else:
trovato = False
trovato # FalseLies es so: "für jedes n in der Liste; wenn du den break-Zweig nimmst,
überspringe das else; andernfalls führe das else aus".
Verschachtelte Schleifen: break beendet nur die innerste
for x in range(3):
for y in range(3):
if x == y == 1:
break
print(x, y)break beendet nur das for y, nicht das for x. Um beide zu beenden, musst du ein
Flag oder eine Funktion + return verwenden.
Das ungewöhnliche loop...else-Konstrukt
In Python können sowohl for- als auch while-Schleifen eine optionale else-Klausel enthalten. Der else-Block wird nur ausgeführt, wenn die Schleife normal abgeschlossen wird (d.h. ohne auf eine break-Anweisung zu stoßen). Dies ist sehr hilfreich für Suchalgorithmen (z.B. "Suche nach einem Element: falls gefunden, break; andernfalls melde, dass es nicht gefunden wurde").
Probiere es aus
Gegeben sei die Liste `numbers = [10, 15, 20, 25, 30, 35]`. Finde die erste Zahl, die durch 7 teilbar ist, und weise sie `result` zu. Wenn keine existiert, weise -1 zu.
Hinweis anzeigen
35 ist die erste (und einzige) Zahl in der Liste, die durch 7 teilbar ist.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Erstelle die Liste `odd_numbers` mit den ungeraden Zahlen von 1 bis 20 (inklusive) unter Verwendung einer for-Schleife über range(1, 21) und continue, um die geraden Zahlen zu überspringen.
Hinweis anzeigen
Wenn n gerade ist, continue; andernfalls append.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Schreibe bei der Liste `numbers = [7, 11, 14, 21, 25]` eine `for`-Schleife, um die erste Zahl zu finden, die durch 7 teilbar und außerdem streng größer als 10 is. Wenn du sie findest, speichere sie in `found` und beende die Schleife mit `break`. Evaluiere schließlich `found`.
Hinweis anzeigen
Prüfe in der Schleife, ob num % 7 == 0 and num > 10:, weise dies found zu und löse break aus.
Lösung nach 3 Versuchen verfügbar