Abschnitt 4 · Lektion 4
break und continue
Eine Schleife läuft, bis ihre Bedingung nicht mehr stimmt oder range keine Zahlen mehr hat.
Manchmal weiß man aber mitten in einer Runde schon, dass es reicht. Das Gesuchte ist gefunden, und
der Rest interessiert nicht mehr. Oder diese eine Runde soll nicht zählen, die nächste aber schon.
Für beides hat Python ein eigenes Wort.
Aufhören, sobald es gefunden ist
einzeln = 0.45
beutel = 4.49
for stueck in range(1, 13):
if stueck * einzeln > beutel:
print(f"Ab {stueck} Brötchen ist der Zwölferbeutel billiger.")
break Beim Bäcker kostet ein Brötchen einzeln 45 Cent, der Beutel mit zwölf Stück 4,49 Euro. Ab wie vielen Brötchen lohnt sich der Beutel, auch wenn ein paar übrig bleiben? Die Schleife probiert es aus, von 1 bis 12 Stück, und rechnet jedes Mal aus, was die einzeln kosten würden. Sobald das mehr ist als der Preis des Beutels, steht die Antwort fest. Ab 10 Brötchen.
An dieser Stelle steht break. Es beendet die Schleife sofort, mitten in der Runde, und es geht mit
der ersten Zeile nach der Schleife weiter. Die Runden für 11 und 12 Stück finden gar nicht mehr
statt. Ohne das break stehen drei Antworten da, für 10, 11 und 12 Brötchen. Gefragt war aber nur
nach der ersten.
Ein break steht fast immer in einem if. Eine Schleife, die schon in der ersten Runde ohne Wenn
und Aber abbricht, hätte man nicht gebraucht. Und es beendet nur die Schleife, in der es steht.
Außerhalb jeder Schleife meldet Python SyntaxError: 'break' outside loop. Meistens ist dann die
Einrückung verrutscht.
Eine Runde überspringen
14.0
15.5
-99
16.0
-99
14.5 summe = 0
anzahl = 0
for messung in range(1, 7):
grad = float(input(f"Messung {messung}: "))
if grad == -99:
continue
summe += grad
anzahl += 1
print(f"{anzahl} gültige Messungen, im Schnitt {summe / anzahl:.1f} Grad") continue ist das kleinere Gegenstück. Es beendet nur die laufende Runde, und dann geht es zurück
an den Anfang der Schleife, zur nächsten.
Im Beispiel werden sechs Messungen eines Thermometers eingelesen. Wenn es nichts messen konnte,
meldet es -99, eine Zahl, die als Temperatur hierzulande nie vorkommt und deshalb als „kein Wert“
ausgemacht ist. Solche Zahlen stecken in echten Messdaten ständig. In den Durchschnitt gehören sie
nicht. Bei -99 geht es deshalb mit continue gleich zur nächsten Messung, und summe und anzahl
bekommen nichts davon mit. Vier gültige Messungen bleiben übrig, im Schnitt 15,0 Grad. Ohne das
continue wären beide -99 mitgezählt, und der Schnitt läge bei frostigen -23,0 Grad.
Dasselbe ginge auch mit einem if, unter dem die beiden Zeilen eingerückt stehen. Mit continue
steht die Ausnahme vorn, wo man sie zuerst liest, und der eigentliche Weg kommt ohne zusätzliche
Einrückung aus. Bei einer Ausnahme ist das egal. Bei dreien ist es der Unterschied zwischen lesbar
und verschachtelt.
So lange, bis es passt
Mia
Ole
Aylin
fertig gaeste = 0
while True:
name = input("Wer kommt? ")
if name == "fertig":
break
gaeste += 1
print(gaeste, "Gäste stehen auf der Liste.") Die dritte Form sieht man in Python besonders oft, while True:. Die Bedingung ist einfach True.
Sie stimmt immer, und ohne etwas im Block wäre das eine Endlosschleife. Beendet wird sie von innen,
durch ein break, sobald etwas Bestimmtes passiert.
Im Beispiel werden Namen für eine Gästeliste aufgenommen, bis jemand fertig eingibt. Wie viele
Gäste es werden, weiß vorher niemand, also passt kein for. Eine Bedingung oben am while hätte
ein anderes Problem, weil sie vor jeder Runde gefragt wird, der Name aber erst in der Runde kommt.
Mit while True wird zuerst gefragt und dann entschieden, ob es weitergeht.
Wichtig ist die Reihenfolge im Block. Das if mit dem break steht direkt nach dem input, vor
allem anderen. Sonst würde fertig noch als Gast gezählt, bevor die Schleife merkt, dass Schluss
ist.
Diese Form heißt so viel wie „mach, bis es passt“. Sie kommt in Lektion 4.6 und in Abschnitt 9 wieder, wenn ein Programm so lange nachfragt, bis eine Eingabe brauchbar ist.
Wenn continue den Schritt überspringt
Dabei gibt es eine Falle, und die betrifft nur while. Bei for holt Python den nächsten Wert von
selbst, ganz gleich, wie die Runde geendet hat. Bei while ist dafür der Schritt im Block da. Steht
ein continue vor ihm, wird er übersprungen, sodass die Bedingung nie kippt und es wieder die
Endlosschleife ist.
Wenn du in einer while-Schleife continue schreibst, lohnt sich also ein Blick, ob der Schritt
davor steht. Bei while True gibt es keinen solchen Schritt. Dort kommt es darauf an, dass jede
Runde etwas Neues einliest. Das klappt, solange das input oben im Block steht, vor jedem
continue.
Was die Aufgabe will
An einer Kasse werden Preise eingelesen, bis jemand fertig ist. Wie viele es werden, weiß vorher niemand. Dazu kommt eine leere Zeile, wie sie beim Tippen schnell mal passiert, und die darf nicht mitzählen.
Zum Mitnehmen
break beendet eine Schleife sofort, continue überspringt nur den Rest der laufenden Runde. Mit while True und einem break darin läuft eine Schleife so lange, bis drinnen etwas Bestimmtes passiert.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 3 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.