In Python gibt es zwei wichtige Schleifen, mit denen du den Verlauf deines Programmcodes beeinflussen kannst. Einerseits gibt es die for-Schleife und andererseits die while-Schleife in Python. Mit der zweiten, also mit der while-Schleife, werden wir uns in diesem Beitrag befassen. Die muss wirklich jeder kennen und anwenden können.
In diesem Beitrag werden die Basics der while-Schleife in Python erklärt und mit Beispielen anschaulich gemacht.
Was ist eine while-Schleife?
Falls du noch keine Erfahrungen mit while-Schleifen in anderen Programmiersprachen gesammelt hast, hier kurz die Basics.
Eine while-Schleife ist eine Kontrollstruktur, die in imperativen Programmiersprachen zum Einsatz kommt.
Du verwendest eine Schleife dann, wenn ein bestimmter Codeblock mehrmals wiederholt ausgeführt werden soll. Das spart natürlich sehr viel Schreibarbeit, wenn du nicht 100-mal den gleichen Code schreiben musst, sondern eine Schleife von sich aus die Arbeit übernimmt.
Eine Schleife wiederholt also einen gewissen Codeabschnitt, du musst ihr nur sagen, wie oft. Und dazu gibt es zwei Möglichkeiten in Python: eine for-Schleife und eine while-Schleife. Und die while-Schleife in Python schauen wir uns jetzt genauer an.
In der aktuellen Python-Dokumentation (Stand: 03.10.22) steht in etwa folgende Erklärung für den Ausdruck while.
„Der while-Ausdruck wird für eine wiederholte Ausführung verwendet, solange ein [bestimmter] Ausdruck wahr ist.“
Zusammengefasst kann man sagen:
- Bei einer while-Schleife musst du eine Bedingung, in Form eines Ausdrucks, angeben. Diese kann entweder wahr (True) oder falsch (False) sein.
- Das Wort while lässt sich in diesem Kontext mit so lange übersetzen.
Solange eine Bedingung wahr ist, wird ein gewisser Codeabschnitt wiederholt.
Wie schreibt man den Code einer while-Schleife in Python?
Nun kommt das Wichtigste: der Python-Code. Wenn du eine while-Schleife in deinem Python-Code verwenden willst, dann sieht das im Grunde genommen immer so aus:
while [Bedingung]:
[Anweisung(en)]
Du beginnst also deinen Codeblock mit dem Wort while, dann folgt ein Leerzeichen und dann eine Bedingung. Dann schließt du die Zeile mit einem Doppelpunkt ab.
Jetzt drückst du Enter und schreibst in die folgenden Zeilen, was innerhalb deiner while-Schleife wiederholt werden soll.
Der Code mit den Anweisungen, der durch den while-Ausdruck eventuell mehrmals wiederholt werden soll, muss eingerückt werden!
Den kompletten eingerückten Codeabschnitt nennt man Schleifenkörper.
Aber genug Erklärungen. Schauen wir uns ein Beispiel an, dann wird es direkt klarer.
Beispiel zur Verwendung einer while-Schleife in Python
Schau dir folgenden Code genau an. Hast du bereits eine Idee, was nach Durchlauf auf der Console erscheinen wird?
zahl = 6
while zahl > 0:
print(zahl)
zahl -= 1
Zuerst wird die Variable zahl deklariert und mit dem Wert 6 initialisiert, also ihr wird der Wert 6 zugewiesen.
Jetzt beginnt der while-Ausdruck mit der Bedingung zahl > 0. Zu Beginn ist die Bedingung zahl > 0 erfüllt, da 6 größer ist, als 0. Hier kannst du nochmal nachlesen, wie solche Bedingungen mithilfe von Vergleichsoperatoren zu verwenden sind.
Die Zahl wird mit dem print-Statement auf der Console ausgegeben, danach wird der Wert der Zahl um 1 verringert. Die Variable zahl hat also nach dem ersten Durchlauf der Schleife den Wert 5 gespeichert.
Diese Zahl ist immer noch größer als 0, also wird der Schleifenkörper wiederholt ausgeführt.
So sieht das Ganze auf der Console aus:
6
5
4
3
2
1
Im letzten Durchlauf der Schleife wurde der Wert 1 ausgegeben. Dann wurde der Wert der Variablen zahl erneut um 1 verringert.
Der neue Wert der Variablen zahl ist dann 0. Die Bedingung ist nicht mehr erfüllt, also wird die Schleife kein weiteres Mal durchlaufen.
Die while-Schleife ist eine vorprüfende (kopfgesteuerte) Schleife
Bei der while-Schleife handelt es sich um eine sogenannte vorprüfende Schleife bzw. kopfgesteuerte Schleife. Das heißt, dass zuerst die Bedingung geprüft wird und erst, falls diese erfüllt ist, wird der Schleifenkörper ausgeführt.
Es ist somit möglich, dass es gar keinen Durchlauf des Schleifenkörpers gibt, insofern die Bedingung von vornherein falsch war.
Siehe folgendes Beispiel:
zahl = 6
while zahl < 0:
print(zahl)
zahl +=1
print("Der Schleifenkörper wurde nicht ausgeführt, es wurde diese Zeile direkt ausgegeben.")
Zu Beginn ist der Wert der Variable zahl 6. Das ist offensichtlich eine positive Zahl, die Bedingung prüft, ob der Wert der Variablen zahl negativ, also kleiner als 0 ist.
Dies ist offensichtlich nicht der Fall und die Schleife wird nicht ausgeführt. Es wird also der Schleifenkörper übersprungen und die nächste Zeile nach der while-Schleife ausgeführt.
Auf der Console erscheint:
Der Schleifenkörper wurde nicht ausgeführt, es wurde diese Zeile direkt ausgegeben.
Wenn es keinen weiteren Code nach der while-Schleife in diesem Beispiel gegeben hätte, würe auf der Console überhaupt nichts ausgegeben.
Warum verwendet man eine while-Schleife?
Schleifen sind Kontrollstrukturen, die den Verlauf des Programms durch Wiederholungen (Iterationen) von Codeblöcken kontrollieren.
Klarerweise wird der Code dadurch übersichtlicher und der Programmierer spart sich extrem viel Zeit.
Angenommen, man möchte einen Programmausschnitt 100 oder 1000-mal durchlaufen lassen, dann wäre es zeitlich wahrscheinlich nicht effizient, den Code so oft hintereinander zu tippen.
Eine Schleife übernimmt die Wiederholung (Iteration) des Codeausschnitts so oft, wie vorgegeben.
Wann benutzt man eine for-Schleife und wann eine while-Schleife?
Den Unterschied zwischen einer for-Schleife und einer while-Schleife macht man sich am besten an einem Codebeispiel klar.
for i in [1, 2, 3]:
print("Hallo Minties!")
i = 1
while i <= 3:
print("Hallo Minties!")
i += 1
Beide Codes liefern das gleiche Ergebnis:
Hallo Minties!
Hallo Minties!
Hallo Minties!
Es wird dreimal die Zeichenkette Hallo Minties! auf der Console ausgegeben.
Bei der for-Schleife handelt es sich um eine Zählerschleife. Der Zähler geht bestimmte Werte durch und führt den Schleifenkörper für genau diese Werte aus.
Die while-Schleife wiederum ist eine kopfgesteuerte oder vorprüfende Schleife, wie weiter oben erklärt. Zuerst wird eine Bedingung geprüft und dann wird der Schleifenkörper ausgeführt, insofern die Bedingung erfüllt ist.
Fazit: Du verwendest eine for-Schleife, wenn du genau weißt, wie oft der Schleifenkörper ausgeführt werden soll. Die while-Schleife verwendest du, wenn du nicht genau weißt, wie oft die Schleife durchgeführt werden soll. Du weißt allerdings, unter welchen Bedingungen der Schleifenkörper ausgeführt werden soll.
while-Schleifen in Python abbrechen bzw. terminieren
Eine sehr wichtige Sache, die du bei while-Schleifen beachten musst, ist, dass sie möglicherweise unendlich oft ausgeführt werden, also nie abbrechen.
Das passiert, wenn die Bedingung in der ersten Zeile nach dem Wort while immer wahr ist.
Hier zwei Beispiele für dich:
zahl = 6
while zahl > 0:
print(zahl)
zahl += 1
In diesem Beispiel haben wir wieder die Variable zahl, die mit dem Wert 6 initialisiert wird. Also zu Beginn der while-Schleife hat diese den Wert 6.
Anschließend wird die Bedingung geprüft. Da der Wert der Variablen zahl größer 0 ist, wird der Schleifenkörper ausgeführt.
Es wird der Wert von zahl mithilfe der print-Funktion auf der Console ausgegeben und danach um 1 erhöht.
Logischerweise ist der Wert von zahl immer noch positiv und das wird sich auch nie ändern, da die while-Schleife in jedem Durchgang +1 drauf addiert.
Folgendes Beispiel zeigt auch eine while-Schleife, die nie endet (terminiert).
variable = True
while variable == True:
print("Hallo")
Im zweiten Beispiel haben wir es mit einer Variablen zu tun, die den Wert True gespeichert hat. Die while-Schleife läuft so oft durch, wie die Variable den Wert True hat. Nun ja, das wird für immer der Fall sein, da innerhalb des Schleifenkörpers nichts diesen Wert verändert.
(Es gibt in Python noch eine elegantere Methode, das zweite Codebeispiel zu schreiben, nämlich mit dem Konzept der „Truthiness“. Da es sich hier um einen Grundlagen-Post handelt, habe ich das mal weggelassen.)
Was passiert mit dem zweiten Codebeispiel? Wenn wir nicht manuell abbrechen, werden wir unendlich viele „Hallo“ auf der Console zu sehen bekommen.
Lassen wir den Code durchlaufen, läuft er theoretisch unendlich lang weiter. Bis irgendetwas ihn unterbricht, also zum Beispiel der PC abstürzt, ausgeschaltet wird oder wir manuell im Editor den Code abbrechen.
Der break-Befehl in Python, um while-Schleifen zu terminieren
Das sind natürlich nicht die einzigen Möglichkeiten. Python hat für das Terminieren (Abbrechen, Enden) von while-Schleifen einen Befehl eingebaut, den du verwenden kannst. Der sogenannte break-Befehl.
Schau dir das folgende Beispiel an:
zahl = 6
while zahl > 0:
print(zahl)
zahl += 1
if zahl >= 10:
break
print("Bei 10 wird abgebrochen!")
Gleiches Beispiel, wie etwas weiter oben in diesem Abschnitt. Allerdings habe ich noch eine Bedingung eingefügt. WENN der Wert der Variablen zahl größer, als 10 ist, dann soll abgebrochen werden – break.
Der Schleifenkörper der while-Schleife wird dann nicht weiter ausgeführt und auch die Bedingung nicht nochmal überprüft.
Stattdessen springt Python zur nächsten Zeile gesprungen.
Auf der Console erscheint das hier:
6
7
8
9
Bei 10 wird abgebrochen!
Da die Zahl zuerst mit der print-Funktion ausgegeben und DANACH um +1 erhöht wird, erscheinen nur die Zahlen 6 bis 9 auf dem Monitor.
Ich möchte in diesem einführenden Beitrag nicht näher auf den break-Befehl eingehen, das geschieht in einem späteren ausführlicheren Beitrag. Genauso wird in diesem zukünftigen Beitrag auch das Konzept mit „else“ im Kontext der while-Schleifen in Python ausgeführt.
Zusammenfassung: Das Wichtigste zur while-Schleife in Python auf einen Blick
- Der Code ist
while [Bedingung]:
[Anweisunge(en)] - Bei der while-Schleife handelt es sich um eine vorprüfende bzw. kopfgesteuerte Schleife. Zuerst wird die Bedingung geprüft und dann eventuell der Schleifenkörper ausgeführt.
- Sie ist neben der for-Schleife und den if-Abfragen eine der wichtigsten Kontrollstrukturen in Python.
- Eine while-Schleife kann möglicherweise unendlich oft durchlaufen werden. Um eine while-Schleife abzubrechen, gibt es den Befehl break.
Lass gerne einen Kommentar da, falls du Fragen oder Anmerkungen zur while-Schleife in Python hast. Schau dich gerne auf meinem Blog um, oder abonniere meinen Newsletter!