While loop - Learn Python 3 - Snakify

Lesson 6
While-Schleife


1. While-Schleife

while Schleife wiederholt die Abfolge von Aktionen mehrmals, bis eine Bedingung zu False ausgewertet wird. Die Bedingung wird vor dem Schleifenkörper gegeben und vor jeder Ausführung des Schleifenkörpers überprüft. In der Regel wird die while Schleife verwendet, wenn es nicht möglich ist, die genaue Anzahl der Schleifeniterationen im Voraus zu bestimmen.

Die Syntax der while Schleife sieht im einfachsten Fall so aus:

while some condition:
    a block of statements

Python prüft zuerst die Bedingung. Wenn es False ist, wird die Schleife beendet und die Kontrolle wird nach dem while Schleifenkörper an die nächste Anweisung übergeben. Wenn die Bedingung True ist, wird der Schleifenkörper ausgeführt, und dann wird die Bedingung erneut überprüft. Dies wird fortgesetzt, solange die Bedingung wahr ist. Sobald die Bedingung zu Falsch wird, wird die Schleife beendet und die Steuerung wird an die nächste Anweisung nach der Schleife übergeben.

Zum Beispiel gibt das folgende Programmfragment die Quadrate aller Ganzzahlen von 1 bis 10 aus. Hier kann man die "while" -Schleife durch die for ... in range(...) -Schleife ersetzen:

i = 1
while i <= 10:
    print(i ** 2)
    i += 1

In diesem Beispiel iteriert die Variable i innerhalb der Schleife von 1 bis 10. Eine solche Variable, deren Wert sich mit jeder neuen Schleifeniteration ändert, wird Zähler genannt. Beachten Sie, dass nach dem Ausführen dieses Fragments der Wert der Variablen i definiert ist und gleich 11 , denn wenn i == 11 die Bedingung i <= 10 zum ersten Mal Falsch.

Hier ist ein weiteres Beispiel für die Verwendung der while Schleife, um die Anzahl der Ziffern einer Ganzzahl n zu bestimmen:

n = int(input())
length = 0
while n > 0:
    n //= 10  # Dies entspricht n = n // 10
    length += 1
print(length)  # 4

Bei jeder Iteration schneiden wir die letzte Ziffer der Zahl mit einer ganzzahligen Division durch 10 ( n //= 10 ). In der variablen length zählen wir, wie oft wir das gemacht haben.

In Python gibt es einen anderen, einfacheren Weg, dieses Problem zu lösen: length = len(str(i)) .

Advertising by Google, may be based on your interests

2. Regelkreisablauf: sonst

Man kann eine else: -Anweisung nach einem Schleifenkörper schreiben, der einmal nach dem Ende der Schleife ausgeführt wird:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Loop ended, i =', i)

Auf den ersten Blick scheint diese Aussage keinen Sinn zu haben, denn der else: -Ansatzkörper kann einfach nach dem Ende der Schleife gesetzt werden. Die Anweisung "else" nach einer Schleife hat nur dann Sinn, wenn sie in Kombination mit dem Befehl break . Wenn der Python-Interpreter während der Ausführung der Schleife auf break stößt, stoppt er sofort die Ausführung der Schleife und beendet sie. In diesem Fall wird der else: -Verzweig nicht ausgeführt. Daher wird break verwendet, um die Schleifenausführung während der Mitte jeder Iteration abzubrechen.

Hier ist ein Black Jack-ähnliches Beispiel: ein Programm, das Zahlen liest und summiert, bis die Summe größer oder gleich 21 ist. Die Eingabesequenz endet mit 0, damit das Programm stoppen kann, auch wenn die Gesamtsumme aller Zahlen ist weniger als 21.

Mal sehen, wie es sich an den verschiedenen Eingängen verhält.

Version 1. Die Schleife wird normalerweise nach Überprüfung der Bedingung verlassen, so dass der Zweig "else" ausgeführt wird.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Version 2. Die Schleife wird durch abgebrochen break , so dass der „else“ Zweig übersprungen.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Der Zweig "Else" kann auch mit der Schleife "for" verwendet werden. Schauen wir uns das Beispiel an, wenn ein Programm 5 ganze Zahlen liest, aber nach rechts stoppt, wenn die erste negative ganze Zahl erfüllt ist.

Version 1. Die Schleife wird normal verlassen, also wird der "else" Zweig ausgeführt.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Version 2. Die Schleife wird abgebrochen, der Zweig "else" wird nicht ausgeführt.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Advertising by Google, may be based on your interests

3. Regelkreisablauf: weiter

Eine weitere Anweisung, die zum Steuern der Schleifenausführung verwendet wird, ist continue . Wenn der Python-Interpreter continue irgendwo in der Mitte der Schleifeniteration trifft, überspringt er alle verbleibenden Anweisungen und geht zur nächsten Iteration über.

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

Wenn der break und continue in mehreren verschachtelten Schleifen platziert sind, beeinflussen sie nur die Ausführung des innersten. Schauen wir uns ein ziemlich dummes Beispiel an, um es zu demonstrieren:

for i in range(3):
    for j in range(5):
        if j > i:
            # bricht nur das für on line 2
            break
        print(i, j)

Die Anweisungen break und continue werden abgeraten, wenn Sie Ihre Idee umsetzen können, ohne sie zu verwenden. Hier ist ein typisches Beispiel für eine schlechte Verwendung der break : Dieser Code zählt die Anzahl der Ziffern in einer Ganzzahl.

n = int(input())
length = 0
while True:
    length += 1
    n //= 10
    if n == 0:
        break
print('Length is', length)

Es ist sauberer und einfacher zu lesen, um diese Schleife mit einer sinnvollen Schleifenbedingung neu zu schreiben:

n = int(input())
length = 0
while n != 0:
    length += 1
    n //= 10
print('Length is', length)
Advertising by Google, may be based on your interests

4. Mehrfachbelegung

In Python ist es möglich, dass eine einzelne Zuweisungsanweisung den Wert mehrerer Variablen ändert. Mal schauen:

a, b = 0, 1

Der oben gezeigte Effekt kann wie folgt geschrieben werden:

a = 0
b = 1

Der Unterschied zwischen den beiden Versionen besteht darin, dass die Mehrfachzuweisung die Werte von zwei Variablen gleichzeitig ändert.

Mehrfachzuweisung ist nützlich, wenn Sie die Werte von zwei Variablen austauschen müssen. In älteren Programmiersprachen ohne Unterstützung von Mehrfachzuweisungen kann dies über die Hilfsvariable erfolgen:

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a, b)
# 2 1

In Python kann derselbe Swap in einer Zeile geschrieben werden:

a = 1
b = 2
a, b = b, a
print(a, b)
# 2 1

Die linke Seite von "=" sollte eine durch Kommas getrennte Liste von Variablennamen haben. Die rechte Seite kann ein beliebiger Ausdruck sein, der durch Kommas getrennt ist. Die Listen auf der linken Seite und auf der rechten Seite sollten gleich lang sein.

Advertising by Google, may be based on your interests