Konzept: Verzweigungen#
Du brauchst Verzweigungen, wenn der Ablauf deines Programms von bestimmten Bedingungen abhängen soll.
Erstes Beispiel#
In einem Spiel möchtest du vielleicht überprüfen, ob eine bestimmte Punktzahl erreicht wurde:
if points > 100:
print("You have won!")
Allgemeine Syntax#
Das ist die allgemeine Syntax einer Bedingung:
if <condition>:
<code block>
Boolesche Ausdrücke#
Eine Bedingung ist ein Ausdruck, der entweder True
oder False
ergibt – solche Ausdrücke nennt man boolesche Ausdrücke.
Die einfachsten sind True
und False
. Nützlichere Ausdrücke basieren auf Vergleichen:
10 < 100 # True
110 < 100 # False
x < 10 # Depends on x
"a" == "b" # False
3 == 4 # False
"ab" == "ab" # True
Du kannst beliebig komplexe Ausdrücke mit Variablen bilden.
Warnung
⚠️ Achtung: Für Vergleiche benutzt man zwei Gleichheitszeichen (==
) – nicht ein einzelnes (=
), das für Zuweisungen verwendet wird!
Vergleichsoperatoren#
Du kannst die folgenden Vergleichsoperatoren verwenden:
<
: kleiner als<=
: kleiner oder gleich==
: gleich>=
: größer oder gleich>
: größer als
Code-Blöcke#
Wenn du mehrere Zeilen Code ausführen willst, wenn die Bedingung erfüllt ist, benutzt du Code-Blöcke, d. h. eingerückte Zeilen unterhalb der if
-Anweisung.
Beispiel:
if points > 100:
print("You have won!")
print("Congratulations")
print("The game is over")
Die letzte Zeile wird immer ausgeführt. Die eingerückten Zeilen nur, wenn points > 100
.
elif
und else
#
Mit elif
und else
kannst du Alternativen formulieren:
if points > 100:
print("You have won!")
print("Congratulations")
elif points > 50:
print("You lost by a narrow margin")
else:
print("You have clearly lost")
Syntax:#
if <condition>:
<code block>
elif <condition>:
<code block>
else:
<code block>
elif
oder else
sind optional, und du kannst mehrere elif
verwenden.
Detailliertes Beispiel – Ein Rechteck bewegen#
Ein Rechteck bewegt sich von rechts nach links. Wenn es den linken Rand erreicht, soll es wieder rechts erscheinen.
Version 1:
import miniworlds
world = miniworlds.World(300, 200)
rect = miniworlds.Rectangle((280, 120), 20, 80)
@rect.register
def act(self):
rect.x -= 1
world.run()
Jetzt setzen wir die Position zurück:
@rect.register
def act(self):
rect.x -= 1
if rect.x == 0:
rect.x = 280
Ein weiteres Beispiel – Ein einfaches Flappy Bird#
Ein Ball soll beim Tastendruck nach oben fliegen und sonst herunterfallen (Gravitation).
import miniworlds
world = miniworlds.World(300, 200)
rect = miniworlds.Rectangle((280, 120), 20, 80)
ball = miniworlds.Circle((20, 50), 20)
velocity = 1
@rect.register
def act(self):
rect.x -= 1
if rect.x == 0:
rect.x = 280
@ball.register
def act(self):
global velocity
self.y += velocity
if world.frame % 10 == 0:
velocity += 1
@ball.register
def on_key_down(self, key):
global velocity
velocity = -2
world.run()
Der Ball fällt und wird durch die Gravitation schneller. Wenn eine Taste gedrückt wird, springt er nach oben.
Kollisionen#
Du kannst auch prüfen, ob zwei Objekte sich berühren, mit Hilfe von Sensor-Methoden wie detect_actor()
:
@ball.register
def act(self):
global velocity
self.y += velocity
if world.frame % 10 == 0:
velocity += 1
actor = self.detect_actor()
if actor == rect:
self.world.stop()
Dies prüft, ob der Ball mit dem Rechteck kollidiert. Falls ja, endet das Spiel.