mitmario.dev

break und continue

Python Sandbox 4 Min Lesezeit 3 BeispieleLektion 4 von 7

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

Ab wann lohnt sich der Zwölferbeutel
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

Messfehler überspringen
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

Eine Gästeliste bis 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, kostenlos

Zu 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.