Zum Hauptinhalt springen

Verzweigung

Sie sind bereits vertraut mit der while-Schleife: Sie wiederholt ihren Körper so lange, bis die gegebene Bedingung nicht mehr zutrifft. Hier nochmal ein Beispiel dazu:

from random import *

n = randint(0, 10)

counter = 0
summe = 0
while counter <= n:
summe = summe + counter
counter = counter + 1

print('Summe der Zahlen von 0 bis und mit ' + str(n) + ': ' + str(summe))

Hier berechnen wir mal wieder die Summer aller Zahlen von 0 bis und mit n, wobei wir n zufällig generieren lassen. Die Zeilen 8 und 9 werden dabei so lange wiederholt, bis die Bedingung counter <= n nicht mehr gilt.

Wenn...

Nun wollen wir stattdessen mal ein einfaches Würfelspiel programmieren. Die Regeln sind simpel: Man wirft einen normalen Würfel. Wenn man weniger als eine 4 würfelt, soll der Text Du hast gewonnen! ausgegeben werden.

Fangen wir mit dem an, was wir bereits kennen:

from random import *

wurf = randint(1, 6)
print('Gewürfelt: ' + str(wurf))

Damit wir beim Ausführen etwas sehen, geben wir die "gewürfelte" Zahl aus.

Es liegt nun auf der Hand, das wir irgendwie eine Bedingung der Form wurf < 4 brauchen. So etwas hier würde aber nicht funktionieren:

from random import *

wurf = randint(1, 6)
print('Gewürfelt: ' + str(wurf))

while wurf < 4:
print('Du hast gewonnen!')

Mit einem while wird der Körper (also das print('Du hast gewonnen!')) ja so lange wiederholt, wie die Bedingung wurf < 4 gültig ist. Wenn wir nun also eine 4, 5 oder 6 würfen, dann ist diese Bedingung nie gültig – der Text Du hast gewonnen! wird also korrekterweise nie ausgegeben. Wenn wir aber eine 1, 2 oder 3 würfeln, dann ist diese Bedingung für immer gültig – wir hätten damit eine Endlosschleife.

Wir brachen also ein neues Konstrukt, bei dem der Körper entweder 0x oder 1x ausgeführt wird: Wenn die Bedingung zutrifft, soll er (genau 1x) ausgeführt werden. Trifft sie nicht zu, soll er nicht (also 0x) ausgeführt werden. Das Stichwort hier lautet if.

Die gute Nachricht: Wir können unseren vorherigen Versuch einfach kopieren und auf Zeile 5 das Wort while mit if ersetzen:

from random import *

wurf = randint(1, 6)
print('Gewürfelt: ' + str(wurf))

if wurf < 4:
print('Du hast gewonnen!')
while und if
while
Schleife (Wiederholung)
Körper wird null- bis unendlich-mal wiederholt
if
Verzweigung (bedingte Ausführung)
Körper wird entweder null- oder einmal ausgeführt

Sonst...

Damit haben wir den wenn-Fall unseres Spiels abgedeckt: Wenn wurf < 4, dann soll der Text Du hast gewonnen! ausgegeben werden. Schön wäre es nun, wenn das Programm auch noch den sonst-Fall abdecken würde: Sonst soll der Text Du hast verloren... ausgegeben werden. Dazu brauchen wir lediglich das Wort else:

from random import *

wurf = randint(1, 6)
print('Gewürfelt: ' + str(wurf))

if wurf < 4:
print('Du hast gewonnen!')
else:
print('Du hast verloren...')
if und else
  • Das if...
    • ...darf mit oder ohne else verwendet werden, je nachdem, was mit dem Programm erreicht werden soll.
    • ...trägt eine Bedingung (z.B. wurf < 4).
  • Das else...
    • ...darf nie ohne if verwendet werden. Es ist immer der "Gegenpol" zu einem if.
    • ...trägt keine Bedingung.

Übungen

Vergleichsoperatoren

In dieser Tabelle finden Sie die wichtigsten Vergleichsoperatoren zum Ausdrücken von Bedingungen.

OperatorBedeutung
<kleiner als
<=kleiner oder gleich
>grösser als
>=grösser oder gleich
==gleich
!=nicht gleich (ungleich)

Merke: Die ersten vier Operatoren werden vor allem zum Vergleich zweier Zahlen (Integer, Float) verwendet. Die Operatoren = und != können für alle Datentypen verwendet werden.

Aufgabe 1

Entwickeln Sie eine leicht veränderte Version des obigen Würfelspiels: Diesmal gewinnt man, wenn man genau eine 5 würfelt.


Laden...
Aufgabe 2

Ein solches Programm haben Sie auch bereits entwickelt: Es zeichnet ein beliebiges n-Eck mit einer Benutzereingabe für die Anzahl Ecken.

Verändern Sie das Programm nun folgendermassen: Wird ein n-Eck mit höchstens 5 Ecken gezeichnet, soll es mit einem roten Stift gezeichnet werden. Bei mehr als 5 Ecken soll die Stiftfarbe grün gewählt werden.

from turtle import *

n = int(input('Anzahl Ecken eingeben: '))

for i in range(n):
forward(100)
right(360 / n)

done()
Laden...
Aufgabe 3

Gleiche Ausgangslage, andere Idee: Jetzt soll die Farbe nicht mehr anhand der Anzahl Ecken definiert werden. Stattdessen wird sie für jeden Strich zufällig festgelegt.

Erzeugen Sie für jeden Strich (also für jede Seite des n-Ecks) eine Zufallszahl, mit der Sie dann entscheiden, ob Sie die Stiftfarbe auf rot setzen (z.B. wenn die Zufallszahl 0 ist) oder auf grün (z.B. wenn die Zufallszahl 1 ist).

from turtle import *

n = int(input('Anzahl Ecken eingeben: '))

for i in range(n):
forward(100)
right(360 / n)

done()
Laden...
Aufgabe 4

Und jetzt nochmal ein wenig anders: Das Programm hat nämlich ein Problem. Ein Achteck hat gerade noch so Platz im Turtle-Feld, aber ab einem Neuneck wird ein Teil der Form ausserhalb des Feldes gezeichnet.

Passen Sie das Programm deshalb wie folgt an: Wenn n höchstens 8 ist, dann soll mit einer Seitenlänge von 100 gezeichnet werden (so wie das aktuell bereits der Fall ist). Falls n aber grösser als 8 ist, dann soll nur noch mit einer Seitenlänge von 50 gezeichnet werden.

from turtle import *

n = int(input('Anzahl Ecken eingeben: '))

for i in range(n):
forward(100)
right(360 / n)

done()
Laden...