mit einer for-in-Schleife werden Elemente aus einer Liste genommen. Für jedes Element wird der Schleifeninhalt ausgeführt. Das aktuelle Element ist im Schleifeninhalt mit dem im Schleifenkopf gesetzten Namen ansprechbar

Analogon

Border

Wiederholtes Ausführen eines Schrittes für mehrere Elemente, z.B. nach der Lektion im Raum jeden Arbeitsplatz kontrollieren: PC ausschalten und Stuhl ans Pult rücken.

Flussdiagramm

Definition einer Schleife «für jede Zutat»
Definition einer Schleife «für jede Zutat»

Pseudo-Code

für jede Zutat mache folgendes:
   gib sie bei
   rühre gut um
   
jetzt servieren
1
2
3
4
5

Syntax

for element in liste:
    #mach etwas mit element
1
2

liste ist der Name der Variable woraus die Elemente genommen werden sollen
element ist der Name welche die Elemente im Schleifeninhalt erhalten

für jedes Element der Liste mache…

Beispiele

Summe und Durchschnitt bilden:

ausgaben = [12.50, 4.25, 9.90, 2.50]

summe = 0
for ausgabe in ausgaben:
    summe = summe + ausgabe
    
durchschnitt = summe/len(ausgaben)

print("Gesamte Ausgaben: " + str(summe))
print(" im Durchschnitt: " + str(durchschnitt))
1
2
3
4
5
6
7
8
9
10

Aufgaben

An Stelle der runden Kreise als Schneeflocken möchten wir nun mit Bildern arbeiten:

Aufgabe : Schneeflocke

Finde ein Schneeflocken-Bild (flake.png) in einer sinnvollen Grösse und baue dieses ein:

...
flocke = Actor('flake', center=(100,100))
...
def draw():
   ...
   flocke.draw()
   ...
1
2
3
4
5
6
7

Aufgabe : Schneeflocken

Nun wollen wir viele Schneeflocken-Actors erzeugen. Weil wir diese nicht alle einzeln benennen können, speichern wir sie in einer Liste ab. In der draw()-Funktion können wir diese Liste dann wieder durchgehen und jede Schneeflocke zeichnen:

import random
...

flocken = []
i = 0
while i < 500:
   x = random.randint(0, WIDTH)
   y = ...
   flocke = Actor('flake', center=(x,y))
   flocken.append(flocke)
   i = i + 1
...

def draw():
   ...
   for flocke in flocken:
      flocke.draw()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Aufgabe : Animation 1

Wie können wir nun die Schneeflocken animieren? Wir müssen die y-Koordinaten jeder Flocke etwas vergrössern und das Bild neu zeichnen:

  • Das Neuzeichnen übernimmt pygameZero für uns
  • Für Verschiebung von Actors gibt es die update()-Funktion

Wir gehen also in der update()-Funktion die Liste der Schneeflocken durch und verschieben jede Flock in y-Richtung:

...

def update():
   ...
   for flocke in flocken:
      flocke.y = flocke.y + 1

1
2
3
4
5
6
7

Erweiterungsmöglichkeiten:

  • Flocken auch etwas in x-Richtung verschieben
  • nicht alle Flocken gleich weit verschieben
  • grössere Flocken schneller fallen lassen
  • leichte Zufallswerte bei der Verschiebung verwenden
Letzte Änderung: 29.10.2019, 21:05:03