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»

# 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:

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

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

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