Mit Hilfe der While-Schleife, können wir Code wiederholt ausführen. Vor jedem Ausführen der Schleife wird eine Bedingung überprüft. Ergibt diese True, dann wird der Schleifeninhalt ausgeführt. Ergibt sie False, dann wird die Schleife beendet und der nachfolgende Code ausgeführt. Der Schleifeninhalt wird durch Einrücken gekennzeichnet.

Analogon

Border

Wiederholtes Ausführen eines Schrittes, nur wenn das Ergebnis noch nicht zufriedenstellend ist: z.B. «ist der Rubiks-Cube noch nicht gelöst?» Dann weiterdrehen.

Flussdiagramm

Definition einer Schleife «Essen solange Hunger»
Definition einer Schleife «Essen solange Hunger»

Pseudo-Code

solange du hunger hast:
    koche etwas
    iss es

nun noch aufräumen
1
2
3
4
5

Syntax

while bedingung:
    #mach etwas
1
2

bedingung ist ein Ausdruck oder eine Funktion welche True oder False ergibt

solange die Bedingung gilt mache…

Beispiele

Feste Anzahl Wiederholungen

Möchte man etwas eine bestimmte Anzahl Mal ausführen, so kann man das einfach mit einer while-Schleife:

  1. Vor der Schleife definieren wir eine Zählvariable und setzen diese auf einen sinnvollen Startwert
  2. In der Bedingung überprüfen wir wie gross der Wert unserer «Zählvariable» ist – wenn er zu gross ist, wird die Schleife abgebrochen
  3. im Inhalt der Schleife erhöhen wir die «Zählvariable». (Sehr wichtig! Sonst erhalten wir eine Endlosschleife)
i = 0
while i < 10:
    print("hallo " + str(i))
    i = i + 1
print("tschüss " + str(i))
1
2
3
4
5

Zufälliger Abbruch der Schleife

Wir simulieren Würfelwürfe mit Hilfe von Zufallszahlen. Wir wollen zählen wie viele Würfe wir brauchen, bis wir eine 6 werfen. Bei einer 6 wird die Schleife abgebrochen und die Anzahl benötigte Würfe ausgegeben:

import random

count = 0
wurf = 0

while wurf < 6:
    wurf = random.randint(1,6)
    count = count + 1
    print(str(count) + ". Wurf: " + str(wurf))

print("Anzahl Würfe bis 6: " + str(count))
1
2
3
4
5
6
7
8
9
10
11

Durch den import von random steht uns die Funktion randint() zur Verfügung. Mit random.randint(1,6) erhalten wir eine ganze Zahl zufällig zwischen 1 und 6 (inklusive 1 und 6).

Im Vergleich könnten wir auch wurf != 6 schreiben. Hier würde es klappen, da wurf vom Typ int ist. Wenn wir aber float auf Gleichheit oder Ungleichheit vergleichen, dann ist das sehr gefährlich, da kleinste Ungenauigkeiten bei Kommazahlen nicht vermeidbar sind und das zu Problemen führt. Also besser immer mit <, > oder <=, >= prüfen!

Aufgaben

Aufgabe : Bäume

Voraussetzung: Die Aufgabe «Baum» vom Kapitel «Funktionen» muss vorhanden sein!

Zeichne eine Allee bestehend aus mindestens 5 Bäumen:

Baue in deiner draw()-Funktion eine while-Schleife ein. Die Schleife soll diese Allee zeichnen, indem sie die baum()-Funktion mehrmals aufruft und dabei die Position/Grösse des Baumes basierend auf der Zählvariablen festlegt:

def draw():
   ...
   i = 30
   while i < 130:
      x = i
      y = 300
      h = 50+i
      r = 25 + i/2
      baum(x, y, h, r)
      i = i + 30
1
2
3
4
5
6
7
8
9
10

Aufgabe : Schneeflocken

Als Vorbereitung auf Weihnachten wollen wir unsere Bild mit Schneeflocken berieseln. Füge deiner draw()-Funktionen eine while-Schleife hinzu. Dieses soll einige Hundert Schneeflocken (kleine weisse Kreise) an zufälligen Positionen zeichnen.

import random

...

def draw():
   ...
   i = 0
   while i < 500:
      x = random.randint(0, WIDTH)
      y = ...
      r = ...
      screen.draw.filled_circle((x, y), r, WHITE)
      i = i + 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Zusatz: Variiere auch die Grösse der Schneeflocken!

Letzte Änderung: 29.10.2019, 21:05:03