0%

Arbeit mit Schleifen wiederholen · Übung

Wiederhole, solange eine Bedingung gilt

Eine for-Schleife besucht die von einer Sammlung gelieferten Werte einzeln. Bei den festen Listen und Zahlenbereichen, die du bisher verwendet hast, kannst du diese Werte im Voraus zählen.

Bei anderen Aufgaben ist es natürlicher zu beschreiben, wann die Arbeit weitergehen soll. Spare weiter, solange der Kontostand unter einem Ziel liegt. Frage weiter, solange eine Antwort unbrauchbar ist. Du musst die Anzahl der Durchläufe nicht vorher berechnen.

Dafür gibt es eine while-Schleife.

Der Aufbau einer while-Schleife

Try it

Lies es wieder wie einen Satz: „Solange count größer als null ist, führe das aus.“

Python prüft zuerst die Bedingung. Ist sie True, führt es den Rumpf aus und kehrt zur erneuten Prüfung zurück. Ist sie False, überspringt es den Rumpf und fährt unterhalb der Schleife fort. Die Bedingung wird vor jedem Durchlauf geprüft, auch vor dem ersten.

Die Bedingung ist ein normaler Vergleich, genau wie in einer if-Anweisung. Der Unterschied: if fragt einmal, while fragt immer wieder.

Drei Teile, die zusammenpassen müssen

Bei einer Schleife, die eine veränderliche Zahl steuert, müssen diese drei Teile zusammenarbeiten. Im Countdown sind sie gut erkennbar:

count = 3            # 1. set up the variable the condition depends on
while count > 0:     # 2. test it before every pass
    print(count)
    count = count - 1  # 3. change it inside the body

Fehlt der erste Teil, löst Python einen NameError aus. Fehlt der dritte, wird die Bedingung nie False. Das ist ein so wichtiges Problem, dass sich die nächste Lektion damit beschäftigt.

Verfolge count selbst durch den Countdown: 3, dann 2, dann 1, dann 0. Python kehrt nach jedem Durchlauf zur while-Zeile zurück. Erreicht count den Wert 0, ist die Bedingung False und die Schleife beendet. Die Übung am Ende dieser Lektion eignet sich für Step, wo du diesen Rückweg beobachten kannst.

Null Durchläufe sind ein gültiges Ergebnis

Weil die Prüfung zuerst kommt, kann eine while-Schleife ihren Rumpf auch gar nicht ausführen:

Try it

Die Bedingung war bereits False, deshalb hat Python den Rumpf direkt übersprungen. Dieses Verhalten ist oft erwünscht. Denke daran, wenn eine Schleife scheinbar unerklärlich keine Ausgabe erzeugt.

Die Wahl zwischen for und while

Du kannst einen Countdown auf beide Arten schreiben:

Try it

Beide sind hier richtig. Wähle die, die deine Absicht ausdrückt:

VerwendeWenn
forDu eine Sammlung durchläufst oder eine bekannte Anzahl von Wiederholungen möchtest
whileEine Bedingung entscheiden soll, ob ein weiterer Durchlauf nötig ist

Die Sparfrage ist ein gutes Beispiel für die zweite Art. Du könntest die Anzahl der Wochen selbst berechnen, aber die Schleife kann sie beim Einzahlen mitzählen:

Try it

Beachte, dass balance bei 120 endet, nicht bei 100. Die Schleife hat den gesamten Durchlauf abgeschlossen, der sie über das Ziel brachte, und erst dann festgestellt, dass die Bedingung False ist. Die Änderung des Kontostands unterbricht den Rumpf nicht: Die Bedingung wird erst erneut geprüft, wenn Python zur while-Zeile zurückkehrt.

Was gibt dieser Code aus?

number = 1

while number < 20:
    print(number)
    number = number * 3

Wann prüft Python eine while-Bedingung?

Schreibe jetzt eine while-Schleife, die die nötigen Einzahlungen zum Erreichen eines Ziels verfolgt.

Aufgabe

Du sparst jede Woche 25 für ein Ziel von 150. Schreibe eine while-Schleife, die weiter einzahlt, bis der Kontostand das Ziel erreicht, und danach meldet, wie lange es gedauert hat.

Vervollständige das Programm, sodass es in jedem Durchlauf:

  • deposit zu balance addiert;

  • 1 zu weeks addiert;

  • eine Fortschrittszeile in der Form Week 1: 25 ausgibt.

Die Schleife soll laufen, solange balance kleiner als goal ist. Behalte die abschließende Zusammenfassungszeile bei, die einmal nach der Schleife läuft.

Erwartete Ausgabe:

Week 1: 25
Week 2: 50
Week 3: 75
Week 4: 100
Week 5: 125
Week 6: 150
Reached 150 after 6 weeks.

Ändere deposit auf 40 und führe das Programm erneut aus. Die Schleife soll weiterhin stoppen, sobald das Ziel erreicht ist, auch wenn der Kontostand darüber hinausgeht. Setze den Wert vor der Abgabe wieder auf 25.

Beobachte die Prüfung der Bedingung

Wenn deine Schleife läuft, klicke in der Werkzeugleiste des Editors auf Step und gehe mit Next hindurch.

Beobachte, wie die Hervorhebung jedes Mal das Ende des Rumpfs erreicht und zur while-Zeile zurückspringt. Bei diesem Rückweg wird die Bedingung erneut geprüft. Behalte balance im Variablenbereich im Blick, während es sich 150 nähert. Beachte, dass der geänderte Kontostand erst geprüft wird, wenn Python zur while-Zeile zurückkehrt.