Kapitel 3
Kapitel 3: Neue Funktionen definieren
Im letzten Kapitel hast du Karel auf eine höhere Reihe steigen lassen. Dabei gab es eine kleine Unbequemlichkeit: Karel konnte nach links drehen, aber für eine Rechtsdrehung mussten wir dreimal turn_left() schreiben.
Der Plan in deinem Kopf lautet an dieser Stelle eigentlich ganz einfach: Karel soll rechts abbiegen. In diesem Kapitel gibst du dieser Befehlsfolge einen eigenen Namen, damit dein Programm näher an deinem Plan lesbar wird.
Neue Befehle definieren
In Python definierst du eine neue Funktion mit def. Direkt danach steht der Name deiner Funktion, dann leere Klammern und ein Doppelpunkt. Die Befehle, die zur Funktion gehören, stehen eingerückt darunter:
def name():
befehl()
noch_ein_befehl()Der Name ist frei wählbar, solange er wie ein Python-Name geschrieben ist. Für Karel lohnt sich ein Name, der beschreibt, was der Codeblock insgesamt bewirkt.
turn_right() als Funktion
Eine Rechtsdrehung besteht aus drei Linksdrehungen. Statt diese drei Zeilen jedes Mal neu zu schreiben, kannst du sie in einer Funktion sammeln:
def turn_right():
turn_left()
turn_left()
turn_left()Danach darfst du turn_right() im Programm genauso verwenden wie Karels eingebaute Befehle. Der Name steht im Hauptprogramm, die genaue Ausführung ist in der Funktion versteckt.
from karel import *
def main():
move()
turn_right()
move()
def turn_right():
turn_left()
turn_left()
turn_left()Weitere kleine Helfer
Du kannst beliebig viele Funktionen definieren. Zum Beispiel ist auch eine halbe Drehung ein wiederverwendbarer Gedanke:
def turn_around():
turn_left()
turn_left()Gute Funktionen machen Programme kürzer, aber vor allem klarer. Wenn ein Name gut gewählt ist, versteht man schneller, was Karel tun soll.
Codeblöcke und Einrückung
Der eingerückte Bereich unter einer def-Zeile heißt Codeblock. In Python ist diese Einrückung Teil der Sprache: Sie zeigt, welche Befehle zur Funktion gehören.
Funktionen werden nacheinander geschrieben. Du definierst also erst eine Funktion, dann die nächste. Eine Funktion gehört nicht in den eingerückten Block einer anderen Funktion.
Ausprobieren
Aufgabe
turn_right() definieren
Karel soll den Beeper einsammeln, auf die höhere Reihe steigen, den Beeper dort ablegen und danach ein Feld weitergehen. Definiere dafür eine eigene Funktion turn_right().
Ziel
- Karel soll am Ende in Spalte 5, Zeile 2 stehen.
- Karel soll nach Osten schauen.
- In der Welt sollen 1 Beeper liegen.
- Karel soll keine Beeper in der Tasche haben.
Karel-Welt
Aktuelle Welt
5 x 3
Blick nach Osten
1,1
2,1Karel-Welt
Zielwelt
5 x 3
Blick nach Osten
4,2
5,2Aktuell unterstützt der Runner Karel-Befehle, eigene Funktionen und einfache for- und while-Schleifen.
Feedback
Schritte: 0
Status: Noch nicht gelöst
Aufgabe
Die Zeitung holen
Karel steht im Haus. Gehe zur Zeitung, sammle den Beeper ein und kehre zur Startposition zurück.
Ziel
- Karel soll am Ende in Spalte 3, Zeile 4 stehen.
- Karel soll nach Osten schauen.
- In der Welt sollen keine Beeper liegen.
- Karel soll 1 Beeper in der Tasche haben.
Karel-Welt
Aktuelle Welt
7 x 5
Blick nach Osten
3,4
6,3Karel-Welt
Zielwelt
7 x 5
Blick nach Osten
3,4Aktuell unterstützt der Runner Karel-Befehle, eigene Funktionen und einfache for- und while-Schleifen.
Feedback
Schritte: 0
Status: Noch nicht gelöst