Verzweigungen
Bei der while-Schleife hast du die Raute im Flussdiagramm kennengelernt. Jetzt nutzen wir sie, um ein Programm je nach Situation unterschiedlich reagieren zu lassen.
Aufgabe 1: Ein Problem erkennen
Gegeben ist die folgende Zeichnung. Mithilfe einer Schleife soll ein solches Bild gezeichnet werden.
Entwickle mithilfe eines Flussdiagramms ein mögliches Vorgehen.
Erläutere anschließend, ob gewisse Elemente deines Flussdiagramms mit den bisher bekannten Python-Befehlen noch nicht umsetzbar sind.
Auflösung
Man braucht eine Entscheidung: „Ist dieser Punkt ein gerader oder ein ungerader?" Je nachdem wird die Farbe rot oder blau gesetzt.
Im Flussdiagramm ist das eine Raute mit zwei abgehenden Pfeilen, die sich danach wieder vereinigen. Genau dafür fehlt uns bisher der Python-Befehl.
Die if-Abfrage
Analysiere das Verhalten des folgenden Programms durch systematisches Testen: Gib nacheinander 4, 7, 0 und 13 ein.
Beschreibe aufgrund deiner Beobachtungen die Funktionsweise einer if-Abfrage.
flowchart TD
S([Start]) --> I[/Eingabe: zahl/]
I --> C{Rest von zahl geteilt durch 2 ist 0?}
C -- ja --> A1[/Ausgabe: Die Zahl ist gerade./]
C -- nein --> A2[/Ausgabe: Die Zahl ist ungerade./]
A1 --> E([Ende])
A2 --> E
if bedingung:führt den eingerückten Block nur dann aus, wenn die Bedingung wahr ist.else:gehört zur passendenif-Abfrage und wird ausgeführt, wenn die Bedingung falsch ist.- Ein
elseist optional. Ohneelsepassiert bei falscher Bedingung einfach nichts. - Wie bei Schleifen gilt: Doppelpunkt am Ende, eingerückter Block darunter.
Vorsicht bei der häufigsten Fehlerquelle:
if zahl = 5: # FALSCH - das ist eine Zuweisung
if zahl == 5: # RICHTIG - das ist ein Vergleich
Aufgabe 2: Die Punkte einfärben
a) Entwickle mithilfe einer if-Abfrage ein Programm, das die Zeichnung aus Aufgabe 1 liefert.
b) Erläutere, ob sich dein Programm von deinem Entwurf aus Aufgabe 1 unterscheidet.
Tipp 1: Woran erkenne ich gerade Punkte?
Die Zählvariable deiner Schleife nimmt nacheinander die Werte 0, 1, 2, 3, … an. Bei geraden Werten ist der Rest der Division durch 2 gleich 0.
Tipp 2: Wo gehört die Abfrage hin?
Die Entscheidung fällt bei jedem Punkt neu. Die if-Abfrage steht also innerhalb der Schleife, direkt vor dem dot.
from turtle import *
shape("turtle")
screensize(600, 300)
penup()
goto(-120, 0)
for i in range(10):
if i % 2 == 0:
pencolor("red")
else:
pencolor("blue")
dot(20)
forward(25)
Aufgabe 3: Das Konto
Das folgende kleine Programm soll erweitert werden:
Ist genug Geld auf dem Konto vorhanden, wird der gewünschte Betrag vom Guthaben abgezogen und der neue Kontostand angezeigt. Andernfalls wird angezeigt, dass nicht genug Geld vorhanden ist.
Implementiere ein geeignetes Programm.
Tipp: Wie lautet die Bedingung?
Genug Geld ist vorhanden, wenn der Kontostand mindestens so groß ist wie der gewünschte Betrag.
konto = 0
einzahlung = int(input("Welchen Betrag zahlst du ein? "))
konto = konto + einzahlung
auszahlung = int(input("Welchen Betrag hebst du ab? "))
if konto >= auszahlung:
konto = konto - auszahlung
print("Neuer Kontostand:")
print(konto)
else:
print("Nicht genug Geld auf dem Konto!")
Aufgabe 4: Wachsende Punkte in zwei Farben
Mithilfe einer Schleife und einer Verzweigung kann man ein Bild wie unten erstellen: Die Punkte werden nach rechts größer, die erste Hälfte ist rot, die zweite blau.
Entwickle ein geeignetes Programm. Stelle deine Lösung zusätzlich als Flussdiagramm dar.
Tipp 1: Zwei Dinge gleichzeitig
In dieser Aufgabe passieren zwei Dinge parallel:
- Die Größe wächst bei jedem Durchlauf – wie bei der Spirale in Lektion 3.
- Die Farbe hängt davon ab, in welcher Hälfte man ist – dafür ist die
if-Abfrage da.
Tipp 2: Die Größe berechnen
Statt eine eigene Variable hochzuzählen, kannst du die Größe direkt aus der Zählvariablen berechnen:
dot(6 + i * 4)
from turtle import *
shape("turtle")
screensize(700, 300)
speed(0)
penup()
goto(-260, 0)
for i in range(12):
if i < 6:
pencolor("red")
else:
pencolor("blue")
dot(6 + i * 4)
forward(45)
Verschachtelte Verzweigungen
Genau wie Schleifen darf man auch Verzweigungen ineinander schachteln.
Das folgende Flussdiagramm stellt den Ablauf eines kurzen Turtle-Programms dar.
a) Analysiere zunächst das Diagramm. Erkläre genau, wie das beschriebene Programm abläuft.
b) Implementiere anschließend ein entsprechendes Programm.
flowchart TD
S([Start]) --> P[/Wiederhole 8 mal/]
P --> I[/Eingabe: groesse/]
I --> C1{groesse größer als 20?}
C1 -- ja --> R[pencolor rot]
C1 -- nein --> C2{groesse größer als 10?}
C2 -- ja --> G[pencolor grün]
C2 -- nein --> B[pencolor blau]
R --> D[dot groesse]
G --> D
B --> D
D --> F[forward 40]
F --> P
P -- fertig --> E([Ende])
Tipp 1: Die zweite Raute
Die zweite Raute wird nur erreicht, wenn die erste mit „nein" beantwortet wurde. In Python steht sie deshalb im else-Zweig der ersten Abfrage.
Tipp 2: Es geht auch kürzer
Für „sonst, falls …" gibt es ein eigenes Schlüsselwort: elif.
if groesse > 20:
pencolor("red")
elif groesse > 10:
pencolor("green")
else:
pencolor("blue")
Das ist gleichbedeutend mit einer im else verschachtelten if-Abfrage, aber deutlich übersichtlicher.
from turtle import *
shape("turtle")
screensize(600, 300)
penup()
goto(-250, 0)
for i in range(8):
groesse = int(input("Wie groß soll der Punkt sein? "))
if groesse > 20:
pencolor("red")
elif groesse > 10:
pencolor("green")
else:
pencolor("blue")
dot(groesse)
forward(40)
elif steht für else if („sonst, falls").
- Python prüft die Bedingungen von oben nach unten.
- Sobald eine zutrifft, wird nur deren Block ausgeführt – alle weiteren werden übersprungen.
- Es darf beliebig viele
elif-Zweige geben, aber höchstens einelseganz am Schluss.
Deshalb ist die Reihenfolge wichtig: Prüfe immer erst die engste Bedingung.
Zusatzaufgabe: Rot, Grün und Blau
Entwickle zunächst mit einem Flussdiagramm ein Programm, in dem die Turtle mithilfe einer Schleife und verschachtelter Verzweigungen ein Bild wie unten zeichnet.
Implementiere es danach.
Tipp: Drei statt zwei Fälle
Bei zwei Farben hast du mit i % 2 gearbeitet. Bei drei Farben liegt es nahe, mit i % 3 zu arbeiten – die möglichen Reste sind dann 0, 1 und 2.