Skip to content

Verzweigungen

Programmieren

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-Dann

Wenn Bedingung wahr, dann mach dies

Syntax

python
if True/False:
   mach_etwas()

mach_weiter()
Zeile 1
True/False wird ersetzt mit Ausdruck der True oder False ergibt
Zeile 2
mach_etwas() wird ersetzt mit beliebigem Code.
Wird nur ausgeführt wenn der obige Ausdruck True ergibt.
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.

python
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

  1. erstelle ein neues Python-Skript blume.py, übernimm den Code des obenstehenden Beispiels und starte das Programm
  2. erhöhe die Anzahl Wiederholungen, so dass das Ergebniss etwas schöner aussieht
  3. erweitere das Programm, so dass die «Blätter» gefüllt gezeichnet werden. Verwende dazu die folgenden Befehle:
  4. variiere die Farben
  • turtle.fillcolor("Farbe") («Farbe» ersetzen!)
  • turtle.begin_fill()
  • turtle.end_fill()
Lösung: Blume
  1. mehr Wiederholungen erreichen wir durch Erhöhen des Wertes im range-Befehls auf Zeile 3
  2. wir können mit begin_fill und end_fill die Blätter füllen. Wir rufen diese Funktionen immer dann auf, wenn ein neues Blatt gezeichnet wird.
  3. 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
python
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()
python
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()
python
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-dann-sonst

Wenn Bedingung wahr, dann mach dies, sonst mach das

Syntax

python
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!)

python
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

  1. erstelle ein neues Python-Skript schachbrett.py, übernimm den Code des obenstehenden Beispiels und starte das Programm
  2. 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:

python

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

  1. erstelle ein neues Python-Skript farbenbrett.py, übernimm den Code des obenstehenden Beispiels und starte das Programm
  2. ä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.

python
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()

Gymnasium Kirchenfeld, fts