Kapitel 7
Kapitel 7: Bedingungen
Bis jetzt konnte Karel Code wiederholen und in Funktionen aufteilen. Mit Bedingungen kommt die letzte große Kontrollstruktur dazu: Karel kann abhängig vom Zustand der Welt entscheiden, welcher Code laufen soll.
Eine Bedingung ist eine Frage mit Ja-oder-Nein-Antwort. Zum Beispiel: Liegt auf diesem Feld ein Beeper? Ist der Weg vor Karel frei?
if und else
Eine if-Anweisung führt ihren eingerückten Codeblock nur aus, wenn die Bedingung wahr ist. Mit else kannst du angeben, was passieren soll, wenn die Bedingung falsch ist:
if bedingung():
befehl_wenn_wahr()
else:
befehl_wenn_falsch()Auch hier ist die Einrückung entscheidend. Sie zeigt, welche Befehle zum if-Zweig und welche zumelse-Zweig gehören.
Beeper invertieren
Ein gutes Beispiel ist eine Funktion, die den Zustand eines Feldes umkehrt. Wenn ein Beeper da ist, hebt Karel ihn auf. Wenn keiner da ist, legt Karel einen ab:
def invert_beeper():
if beepers_present():
pick_beeper()
else:
put_beeper()Diese Funktion ist klein, aber mächtig: Zusammen mit einerwhile-Schleife kann Karel eine ganze Reihe Feld für Feld invertieren.
if ohne else
Manchmal gibt es nur im Ja-Fall etwas zu tun. Dann kann derelse-Zweig fehlen:
if beepers_present():
pick_beeper()Das ist wie eine while-Schleife, die höchstens einmal läuft: Die Bedingung wird geprüft, der Block wird entweder einmal oder gar nicht ausgeführt.
Karels Bedingungen
| Bedingung | Gegenteil | Bedeutung |
|---|---|---|
| front_is_clear() | front_is_blocked() | Ist vor Karel der Weg frei? |
| beepers_present() | no_beepers_present() | Liegt auf Karels Feld ein Beeper? |
| left_is_clear() | left_is_blocked() | Ist links von Karel der Weg frei? |
| right_is_clear() | right_is_blocked() | Ist rechts von Karel der Weg frei? |
| beepers_in_bag() | no_beepers_in_bag() | Hat Karel Beeper in der Tasche? |
| facing_north() | not_facing_north() | Schaut Karel nach Norden? |
| facing_south() | not_facing_south() | Schaut Karel nach Süden? |
| facing_east() | not_facing_east() | Schaut Karel nach Osten? |
| facing_west() | not_facing_west() | Schaut Karel nach Westen? |
Ausprobieren
Aufgabe
Beeper-Reihe invertieren
Karel läuft eine Reihe entlang. Auf jedem Feld soll danach genau das Gegenteil gelten: Lag dort ein Beeper, soll er aufgehoben werden. Lag dort keiner, soll Karel einen Beeper ablegen.
Ziel
- Karel soll am Ende in Spalte 7, Zeile 1 stehen.
- Karel soll nach Osten schauen.
- In der Welt sollen 4 Beeper liegen.
- Karel soll 3 Beeper in der Tasche haben.
Karel-Welt
Aktuelle Welt
7 x 1
Blick nach Osten

1,1
3,1
6,1Karel-Welt
Zielwelt
7 x 1
Blick nach Osten
2,1
4,1
5,1
7,1Aktuell unterstützt der Runner Karel-Befehle, eigene Funktionen und einfache for- und while-Schleifen.
Feedback
Schritte: 0
Status: Noch nicht gelöst