Die Macht der Wiederholung – Schleifen

Nochmal!

Oft soll ein bestimmter Programmabschnitt mehrmals durchlaufen werden. Ein Spiel bei dem nur ein einziges mal die Eingabe über den Controller abgefragt würde, wäre sicherlich nicht besonders interessant..

Um ein Programm zu schreiben, in dem ein bestimmter Abschnitt mehrmals durchlaufen wird, brauchst du im Normalfall sogenannte Schleifen.

In Python gibt zwei Arten von Schleifen: die „for“-Schleife und die „while“-Schleife. Die „for“-Schleife wird verwendet, um eine bestimmte Anzahl von Schritten durchzuführen, während die „while“-Schleife verwendet wird, um eine Aktion so lange auszuführen, wie eine bestimmte Bedingung erfüllt ist.

while

Die while-Schleife wird meist verwendet, wenn vor Ausführung nicht genau bekannt ist, wie viele Durchläufe es geben soll. Zu Beginn eines jedes Durchlaufs, auch des ersten, wird überprüft, ob eine Bedingung erfüllt ist. Ist dies der Fall, wird der Programmteil innerhalb der Schleife ausgeführt. Vor der nächsten Ausführung wird die Bedingung erneut geprüft. Ist sie erfüllt wird der Programmteil erneut ausgeführt und so weiter…

Beispiel

Angenommen, wir möchten eine Zahl erraten, die der Picoboy in einer Variablen abgelegt hat. Wir können eine „while“-Schleife verwenden, um die Schleife so lange auszuführen, bis wir die richtige Zahl erraten haben:

richtigeZahl = 7                                                    # neue Variable "richtgeZahl" wird auf 7 gesetzt
gerateneZahl = 0                                                    # neue Variable "gerateneZahl" wird auf 0 gesetzt
while gerateneZahl != richtigeZahl:                                 # Der folgende (eingerückte) Codeabschnitt wirs ausgeführt, 
                                                                    # solange "gerateneZahl" ungleich (!=) "richtigeZahl" ist.
  gerateneZahl = int(input("Rate eine Zahl zwischen 1 und 10: "))   # eine eingegebene Zahl wird eingelesen und in "gerateneZahl"
                                                                    # abgelegt.
print("Richtig geraten!")

for

Die for-Schleife wird oft im Zusammenhang mit Listen verwendet. – Auf sie kommst du später noch einmal zurück.

Bis dahin musst du dich mit einer einfacheren Funktionalität der for-Schleife begnügen, die eine bestimmte Anzahl von Wiederholungen durchführt. Dabei steigt die sogenannte Schleifenvariable bei jeder Wiederholung im Normalfall um jeweils Eins.

Beispiel

from picoboy import PicoBoy

pb = PicoBoy()

# Den Teil oberhalb dieser Zeile nicht verändern

pb.fill(0)
pb.show()

for i in range(0, 16):           # Der Inhalt der Schleife wird 16 mal wiederholt. Die
                                 # Schleifenvariable i nimmt dabei die Werte von 0 bis 15 an.
  pb.line(0, 0 , i * 8, 63, 1)   # Linie von (0,0) nach (i*8,63) in den Speicher zeichnen
  pb.delay(50)                   # 50 Millisekunden warten
  pb.show()                      # Grafik zum Display übertragen und anzeigen.

Schachteln

Wie du es schon von den Verzweigungen kennst, lassen sich auch Schleifen schachteln uns mit Verzweigungen kombinieren.

Beispiel

from picoboy import PicoBoy

pb = PicoBoy()

# Den Teil oberhalb dieser Zeile nicht verändern

pb.fill(0)
pb.show()

for i in range(0, 8):          # Der eingerückte Teil hinter dieser Schleife wird 8 mal ausgeführt.
                               # Das gilt auch für die Schleife.
                               # Dabei nimmt i die Werte von 0 bis 7 an.
  for j in range(0,16):        # Der eingerückte Teil hinter dieser Schleife wird je 16 mal ausgeführt.
                               # Dabei nimmt j die Werte von 0 bis 15 an.
    pb.pixel(j * 8, i *8 , 1)  # Dieser Teil wird also 8 * 16 = 128 mal ausgeführt.
                               # Bei den ersten 16 Durchläufen hat i den Wert 0, j nimmt nacheinander 
                               # wie Werte von 0 bis 15 an. 
                               # Anschließende hat i den Wert 1 und j nimmt wieder nacheinander die 
                               # Werte von 0 bis 15 an.
    pb.delay(20)
    pb.show()

Beispiel

from picoboy import PicoBoy
import random

pb = PicoBoy()

xPos = 64
yPos = 32
spielLaeuft = 1

while True:
  if(pb.pressedUp() and yPos > 0):              # Joystick nach oben gedrückt?
    yPos = yPos - 1                             # Verringere Variable yPos um 1
  if(pb.pressedDown() and yPos < 63):           # Joystick nach unten gedrückt? 
    yPos = yPos + 1                             # Erhöhe Variable yPos um 1 
  if(pb.pressedLeft() and xPos > 0):            # Joystick nach links gedrückt?
    xPos = xPos - 1                             # Verringere Variable xPos um 1
  if(pb.pressedRight() and xPos < 127):         # Joystick nach rechts gedrückt?
    xPos = xPos + 1                             # Erhöhe Variable xPos um 1
  if(pb.pressedCenter()):                       # Joystick mittig gedrückt?
    pb.fill(0)                                  # Bildspeicher leeren

  pb.pixel(xPos,yPos,1)                         # Pixel an Position (xPos,yPos) in den Bildspeicher zeichnen
  pb.show()                                     # Bildspeicher anzeigen
  pb.delay(20)                                  # 20 ms warten

 

Beispiel

Auch tiefere Verschachtelungen sind möglich:

from picoboy import PicoBoy
pb = PicoBoy()

# Den Teil oberhalb dieser Zeile nicht verändern

pb.fill(0)
pb.show()

for i in range(0, 8):
  for j in range(0,16):
    if i*2 != j:
      pb.fill_rect(j * 8, i * 8, 7, 7 , 1)
pb.show()

Hier geht es weiter.