Mit Verzweigungen können Code-Blöcke nur unter bestimmten Bedingungen ausgeführt werden. Eine Bedingung ist ein Ausdruck der True oder False ergibt.
Wenn-dann (if)
Wenn Bedingung wahr, dann mach dies
Syntax
if True/False:
mach_etwas()
mach_weiter()- Zeile 1
True/Falsewird ersetzt mit Ausdruck derTrueoderFalseergibt- Zeile 2
mach_etwas()wird ersetzt mit beliebigem Code.- Wird nur ausgeführt wenn der obige Ausdruck
Trueergibt. - Ist eingerückt.
- Zeile 4
mach_weiter()wird ersetzt mit Code der immer ausgeführt wird.- Ist nicht mehr eingerückt.
Beispiel
Die Turtle bewegt sich zufällig, mit leichtem Rechtsdrall, von Startpunkt weg. Sobald sie aber weiter als 100 Pixel vom Nullpunkt entfernt ist, geht sie dorthin zurück.
import turtle, random
for zahl in range(1,100,1):
if turtle.distance(0,0) > 100:
turtle.penup()
turtle.goto(0,0)
turtle.pendown()
winkel = random.randint(-10,20)
turtle.right(winkel)
turtle.forward(10)
turtle.penup()
turtle.goto(0,0)
turtle.done()- ab Zeile 3
- for-in mit 100 Wiederholungen
- Zeilen 4-7
- if-Block – wenn die Turtle zu weit weg ist, dann geht sie zum Start zurück
- Zeilen 8-10
- gehört nicht mehr zum if-Block, ist aber hoch Teil der for-in-Schleife, wird also 100x ausgeführt
- ab Zeile 12
- ausserhalb der for-in-Schleife – wird am Schluss 1x ausgeführt (die Turtle fährt ohne zu zeichnen in die Mitte zurück)
Aufgaben
Aufgabe: Blume
- erstelle ein neues Python-Skript
blume.py, übernimm den Code des obenstehenden Beispiels und starte das Programm - erhöhe die Anzahl Wiederholungen, so dass das Ergebniss etwas schöner aussieht
- erweitere das Programm, so dass die «Blätter» gefüllt gezeichnet werden. Verwende dazu die folgenden Befehle:
- variiere die Farben
turtle.fillcolor("Farbe")(«Farbe» ersetzen!)turtle.begin_fill()turtle.end_fill()
Lösung: Blume
- mehr Wiederholungen erreichen wir durch Erhöhen des Wertes im
range-Befehls auf Zeile 3 - wir können mit
begin_fillundend_filldie Blätter füllen. Wir rufen diese Funktionen immer dann auf, wenn ein neues Blatt gezeichnet wird. - wir können Farben berechnen indem wir drei Werte (r,b,g) zwischen 0 und 1 angeben. Diese Werte bestimmen dann den Farbanteil von Rot, Grün und Blau
import turtle, random
for zahl in range(1,1000,1):
if turtle.distance(0,0) > 100:
turtle.penup()
turtle.goto(0,0)
turtle.pendown()
winkel = random.randint(-10,20)
turtle.right(winkel)
turtle.forward(10)
turtle.penup()
turtle.goto(0,0)
turtle.done()import turtle, random
turtle.fillcolor("green")
turtle.begin_fill()
for zahl in range(1,1000,1):
if turtle.distance(0,0) > 100:
turtle.penup()
turtle.goto(0,0)
turtle.end_fill()
turtle.begin_fill()
turtle.pendown()
winkel = random.randint(-10,20)
turtle.right(winkel)
turtle.forward(10)
turtle.penup()
turtle.goto(0,0)
turtle.end_fill()
turtle.done()import turtle, random
turtle.speed(0)
for zahl in range(1,1000,1):
if turtle.distance(0,0) > 100:
turtle.fillcolor(0,zahl/1000,0)
turtle.penup()
turtle.goto(0,0)
turtle.end_fill()
turtle.begin_fill()
turtle.pendown()
winkel = random.randint(-10,20)
turtle.right(winkel)
turtle.forward(10)
turtle.penup()
turtle.goto(0,0)
turtle.end_fill()
turtle.done()Wenn-dann-sonst (if-else)
Das if kann mit einem else erweitert werden:
Wenn Bedingung wahr, dann mach dies, sonst mach das
Syntax
if True/False:
mache_dies()
else:
mache_das()Beispiel
Wir versuchen ein Schachbrettmuster zu zeichnen. Dies erreichen wir durch zwei verschachtelte Schleifen die jeweils von 0 bis 7 zählen. Die Farbe des aktuellen Feldes kann aus den Koordinaten berechnet werden: Zählen wir beide Koordinaten zusammen, so ist die Summe gerade für schwarze Felder und ungerade für weisse. (Gerade/ungerade kann man mit dem Rest der Division durch 2 bestimmen!)
import turtle
KACHEL = 20
turtle.speed(0)
def quadrat(groesse):
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
for y in range(0,8,1):
for x in range(0,8,1):
schwarz = (x+y)%2 == 0
if schwarz:
turtle.begin_fill()
quadrat(KACHEL)
turtle.end_fill()
else:
quadrat(KACHEL)
turtle.forward(KACHEL)
turtle.backward(8*KACHEL)
turtle.left(90)
turtle.forward(KACHEL)
turtle.right(90)
turtle.done()Aufgaben
Aufgabe: Schachbrett
- erstelle ein neues Python-Skript
schachbrett.py, übernimm den Code des obenstehenden Beispiels und starte das Programm - stelle die Turtle zu Beginn in die untere linke Ecke und passe die Kachel-Grösse so an, dass das Schachbrett das gesamte Fenster bedeckt.
Lösung: Schachbrett
Das Turtle-Fenster ist etwas weniger gross als 800 Pixel mit dem Nullpunkt in der Mitte. Wir starten also beim (-400,-400) und vergrössern die Kachel auf 100 Pixel:
import turtle
KACHEL = 100
turtle.speed(0)
turtle.penup()
turtle.goto(-400,-400)
turtle.pendown()
def quadrat(groesse):
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
for y in range(0,8,1):
for x in range(0,8,1):
schwarz = (x+y)%2 == 0
if schwarz:
turtle.begin_fill()
quadrat(KACHEL)
turtle.end_fill()
else:
quadrat(KACHEL)
turtle.forward(KACHEL)
turtle.backward(8*KACHEL)
turtle.left(90)
turtle.forward(KACHEL)
turtle.right(90)
turtle.done()Zusatzaufgabe: farbig
- erstelle ein neues Python-Skript
farbenbrett.py, übernimm den Code des obenstehenden Beispiels und starte das Programm - ändere das Programm, so dass nicht zwischen den zwei Farben Schwarz und Weiss, sondern zwischen den drei Grundfarben Rot, Grün und Blau abgewechselt wird.
Lösung: farbig
Wir machen eine Liste mit beliebig vielen Farben. Dann gehen wir diese Farben immer wieder durch und wählen sie eine nach der anderen aus. (das erreichen wir mit % und der Länge der Farben-Liste). So könnten wir auch das normale Schachbrett zeichnen.
import turtle
KACHEL = 20
turtle.speed(0)
farben = ["red", "green", "blue"]
#farben = ["white", "black"]
def quadrat(groesse):
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
turtle.forward(groesse)
turtle.left(90)
for y in range(0,8,1):
for x in range(0,8,1):
farbe = farben[(x+y)%len(farben)]
turtle.fillcolor(farbe)
turtle.begin_fill()
quadrat(KACHEL)
turtle.end_fill()
turtle.forward(KACHEL)
turtle.backward(8*KACHEL)
turtle.left(90)
turtle.forward(KACHEL)
turtle.right(90)
turtle.done()