133
5.4
Bedingte Wiederholung (while)
Bedingte Schleifen werden in Python durch while-Anweisungen implementiert. Eine
while-Anweisung hat meist folgendes Format:
Hinter dem Schlüsselwort
while steht ein Ausdruck, der die Bedingung darstellt, gefolgt
von einem Doppelpunkt. In den folgenden Zeilen stehen die Anweisungen, die wiederholt
werden sollen – das Schleifeninnere. Sie müssen um die gleiche Anzahl von Stellen einge-
rückt sein, damit sie der Interpreter als zusammengehörigen Block erkennt.
Im folgenden Python-Programm kann der Benutzer bestimmen, wie viele Quaderberech-
nungen er durchführen will. Erst wenn er auf die Frage »Noch einmal?« mit etwas anderem
als
"j" antwortet, wird die Schleife verlassen.:
5.4.1 Endlosschleifen
Vielleicht war es Homer, der zum ersten Mal von einer Endlosschleife berichtete: Die Götter
hatten Sisyphos dazu verurteilt, unablässig einen Felsbrocken einen Berg hinaufzuwälzen,
von dessen Gipfel er jedes Mal wieder herunterrollte. Eine solche niemals endende Wieder-
holung ist offenbar schon seit Jahrtausenden ein Albtraum der Menschheit. Bei der Pro-
grammierung einer
while-Schleife tritt sie dann auf, wenn die Schleifenbedingung immer
erfüllt ist.
In diesem Beispiel ist die Bedingung der konstante Wert
True, der den Wahrheitswert WAHR
repräsentiert. Da die Bedingung niemals falsch wird, läuft das Skript ewig. Das Programm
kann in der IDLE-Shell auf zwei Weisen abgebrochen werden:
Sie versuchen, das Shell-Fenster durch Klick auf das Kreuz oben rechts in der Ecke zu
schließen. Das System teilt Ihnen mit, dass das Programm noch läuft, und fragt, ob Sie
den Prozess töten wollen, worauf Sie mit »ja« antworten.
Sie lösen durch die Tastenkombination (Strg)+(C) einen KeyboardInterrupt aus, der
das Programm abbricht.
while Bedingung:
anweisungsblock
# quaderberechnung.py
print("Berechnung des Volumens eines Quaders")
antwort = 'j'
while antwort == 'j':
l = input ("Länge in cm: ")
b = input ("Breite in cm: ")
h = input("Höhe in cm:")
volumen = float(l) * float(b) * float(h)
print ("Das Volumen ist", volumen, "ccm.")
antwort = input("Noch einmal? (j, n) ")
print ("Vielen Dank für die Benutzung dieses Programms")
>>> while True: print("endlos",end="")
Kapitel 5
Kontrollstrukturen
134
Endlosschleifen entstehen manchmal versehentlich auf Grund eines Programmierfehlers.
Fatal ist es, wenn Variablen, die in der Bedingung vorkommen, im Innern der Schleife gar
nicht verändert werden. In diesem Fall kann sich die Bedingung nicht ändern, insbesondere
kann sie nicht falsch werden. Meist ist ein Schreibfehler die Ursache. Wenn Sie in Ihrem
Programm eine Endlosschleife haben, sollten Sie zunächst überprüfen, ob die Variablen, die
in der Bedingung enthalten sind, im Schleifeninneren tatsächlich auch vorkommen und
verändert werden.
Eine »Falle«, die zu Endlosschleifen führen kann, ist der Test auf Gleichheit bei Gleitkomma-
zahlen. Im folgenden Beispiel bricht die Wiederholung erst ab, wenn der Wert der Variablen
zahl gleich null ist. Das ist aber niemals der Fall. Das Problem ist, dass Gleitkommazahlen
meist nicht exakt sind. Die Gleitkomma-Null ist eben nicht genau gleich null.
Programmlauf:
usw.
Endlosschleifen können – zum Beispiel in Kombination mit
break-Anweisungen – bewusst
als »algorithmischer Kniff« eingesetzt werden. Im folgenden Beispiel wird so lange eine
Benutzereingabe eingefordert, bis eine Zahl zwischen
1 und 10 eingegeben worden ist:
Programmlauf:
zahl = 1.0
while zahl != 0:
print(zahl, end=" ")
zahl = zahl - 0.2
1.0 0.8 0.6 0.4 0.2 5.55111512313e-017 -0.2
print("Bitte geben Sie eine Zahl zwischen 1 und 10 ein.")
while True:
zahl = input("Zahl: ")
if 1 <= int(zahl) <= 10:
break # Zahl ist in Ordnung
else:
print("Die Zahl muss zwischen 1 und 10 liegen.")
print("Danke für die Zahl.")
Bitte geben Sie eine Zahl zwischen 1 und 10 ein.
Zahl: 12
Die Zahl muss zwischen 1 und 10 liegen.
Zahl: 4
Danke für die Zahl.

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.