Zum Hauptinhalt springen
25h

9. ⭐️ While

Wiederholen, solange die Frage mit "Ja" beantwortet wird

Eine Wiederholung mit einer Frage führt einen Codeblock so lange aus, bis die Frage nicht mehr mit "Ja" beantwortet wird. Im folgenden Beispiel wird solange eine Spirale gezeichnet, bis die Distanz der Turtle vom Zentrum mehr als 200px beträgt.

Unendliche Schleife

Diese Art von Wiederholung kann dazu führen, dass eine Frage immer mit "Ja" beantwortet wird und das Programm also nie endet.

Oft ist dies nicht gewollt, doch einmal gestartet, ist es dann in der Browser-Version von Python schwierig, das Programm zu stoppen und die ganze Seite reagiert nicht mehr. Um das Programm zu Dies gelingt: Oft ist dies nicht gewollt, doch einmal gestartet, ist es dann in der Browser-Version von Python schwierig, das Programm zu stoppen und die ganze Seite reagiert nicht mehr. Um das laufende Programm zu stoppen, muss:

  • der ganze Tab geschlossen und die Seite in einem neuen Tab geöffnet werden. (Tipp: Die URL zuerst kopieren...)

  • (den ganzen Browser über den Taskmanager schliessen)

winkel = 20 setzen
Ist der Abstand zum Zentrum kleiner als 200px?
5 Schritte vorwärts
winkel° nach links
winkel auf 99% des aktuellen Werts setzen
from turtle import *

winkel = 20
while distance(0, 0) < 200:
forward(5)
left(winkel)
winkel = winkel * 0.99

Oft könnte man dies auch mit einer for-Schleife erreichen. Jedoch müsste man dann zuerst berechnen, wie viele Schritte nötig sind, bis dies der Fall ist. Im obigen Beispiel kann etwa der Schrumpf-Faktor (0.99) verändern, ohne die Frage (weniger als 200px Abstand zum Zentrum?) zu ändern.

Aufgabe

Probieren Sie es aus und spielen Sie mit dem Schrumpf-Faktor 0.99 im obigen Bispiel.

Spirale.py
from turtle import *

winkel = 20
while distance(0, 0) < 200:
forward(5)
left(winkel)
winkel = winkel * 0.99
  1. Wann gibt es mehr/weniger Windungen?

  2. Wann entsteht eine unendliche Schleife?

Wiederholungen mit der while-Schleife

Mit der while-Schleife können alle Wiederholungen, die mit der for i in range(...): Syntax erzeugt wurden, ebenfalls erzeugt werden. Dabei muss aber jeweils eine Variable, z.B. i, verwendet werden, welche sich die Anzahl Wiederholungen merkt. Natürlich muss diese Variable dann bei jeder Wiederholung um eins hochgezählt werden. Eine solche Variable, die bei jeder Wiederholung erhöht wird, wird Schleifenzähler oder Laufvariable genannt.

from turtle import *

i = 0
while i < 4:
forward(100)
left(90)
i = i + 1
for zu while

Schreiben Sie das untenstehende Programm so um, dass nur noch while Schleifen verwendet werden.

from turtle import *

forward(30)
left(60)

for i in range(5):
forward(100)
left(72)
backward(20)
to-while.py
from turtle import *
SSR
while zu for

Schreiben Sie das untenstehende Programm so um, dass nur noch for Schleifen verwendet werden.

from turtle import *

speed(10)

def move(x, y):
penup()
goto(x, y)
pendown()

def quadrat():
i = 0
while i < 4:
forward(20)
left(90)
i = i + 1

zeile = 0
while zeile < 5:
spalte = 0
while spalte < 3:
move(zeile * 20, spalte * 20)
quadrat()
spalte = spalte + 1
zeile = zeile + 1
to-while.py
from turtle import *
SSR

Anwendung

Die while-Schleife kommt oft bei Benutzerinteraktionen, Simulationen oder bei sich dynamisch ändernden Daten vor. Sonstige Wiederholungen lassen sich normalerweise einfacher mit einer for-Schleife umsetzen.

Ratespiel

Ändern Sie das Ratespiel aus dem Kapitel Verzweigungen so ab, dass die Spieler:in unendlich viele Versuche hat um die Zahl zu finden.

Wurde die gesuchte Zahl gefunden, soll die Anzahl Versuche zurückgemeldet werden.

SSR