9.2.1. Die while-Schleife#
Die while-Schleife verwenden wir immer dann, wenn wir (zur Laufzeit) nicht wissen wie viele Wiederholungen wir maximal benötigen.
Die Wiederholung endet sobald eine bestimmte Bedingung, d.h. ein logischer Ausdruck P zu False ausgewertet wird.
while P:
# Codeblock1
else: # (optional)
# Codeblock2
Codeblock2 wird einmal ausgeführt sobald P zu False ausgewertet wird und die while-Schleife verlassen wird, d.h. als letzter Schritt.
Endlosschleifen
Wird P niemals False, so endet die Wiederholung niemals und wir haben eine sog. Endlosschleife!
i = 0
while i < 10:
i += 1
print(i)
else:
print('end of the while-loop')
1
2
3
4
5
6
7
8
9
10
end of the while-loop
Mächtigkeit der While-Schleife
Jede for-Schleife lässt sich in eine while-Schleife transformieren!
names = ['Sarah', 'Sebastian', 'Babar', 'Simon', 'Martin']
for name in names:
print(name)
print()
i = 0
while i < len(names):
print(names[i])
i += 1
Sarah
Sebastian
Babar
Simon
Martin
Sarah
Sebastian
Babar
Simon
Martin
while-Schleifen sind mächtiger aber auch gefährlicher bzw. oftmals schwerer zu lesen und zu verstehen als for-Schleifen.
Verwendungskriterium
Verwenden Sie die while-Schleife nur wenn die for-Schleife ungeeignet ist.
break und continue funktionieren für die while-Schleife genauso wie für die for-Schleife.
Verwendungskriterium While-Schleife
Gehen Sie sparsam mit break und continue um, oftmals brauchen Sie es nicht!
Folgender Code zeigt eine unnötige Verwendung von continue.
# bad code!!!
i = 0
while i < 10:
i += 1
if i % 2 == 0:
continue
print(i)
1
3
5
7
9
Stattdessen können wir die if-Bedingung anpassen.
# better!
i = 0
while i < 10:
i += 1
if i % 2 == 1:
print(i)
1
3
5
7
9
Oder aber Sie erhöhen die Zählervariable um zwei anstatt um eins.
# even better!
i = 1
while i < 10:
print(i)
i += 2
1
3
5
7
9
Am einfachsten zu lesen bleibt jedoch die for-Schleife.
# even better!
for i in range(1,10,2):
print(i)
1
3
5
7
9
Verhindern von Endlosschleifen
Prüfen Sie immer ob Ihre Bedingung P durch den Schleifenrumpf garantiert irgendwann False ergibt!
Exercise 9.4 (Praxisaufgabe (PA3.1): Fakultät)
Schreiben Sie ein Programm, das eine Zahl \(n\) einliest und \(n!\) berechnet.
Akzeptieren Sie nur \(1 \le n \le 50\) (Eingabeprüfung mit
while).Berechnen Sie danach die Fakultät iterativ (ebenfalls mit
while).
n = 22