Die while-Schleife

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