Aussehen
Funktionen
Dein Slalom-Programm enthält vermutlich vier- oder fünfmal fast dieselben Zeilen — einmal für jeden Baum. Das funktioniert, aber es ist unangenehm: Wenn du einen Fehler findest, musst du ihn an fünf Stellen reparieren, und beim vierten Mal vergisst du eine.
Programmiererinnen haben dafür einen Grundsatz: Schreib nichts zweimal. Das Mittel dagegen ist die Funktion.
python
def halbkreis():
turnLeft()
move()
turnRight()
move()
turnRight()
move()
turnLeft()def gibt einem Block Zeilen einen Namen. Ausgeführt wird dabei noch nichts — die Funktion liegt nur bereit. Erst wenn irgendwo halbkreis() steht, läuft sie ab.
Funktion
Eine Funktion fasst Anweisungen unter einem Namen zusammen. Sie wird einmal mit def beschrieben und danach beliebig oft aufgerufen. Der gute Name ist dabei kein Beiwerk: Er macht aus sieben Zeilen einen Gedanken.
Ein halber Kreis
Schreibe die halbe Umrundung eines Baums in die Funktion und fahre damit wieder Slalom. Dein Programm sollte danach deutlich kürzer sein als vorher.
Ordnung schaffen
Dieses Programm funktioniert, ist aber schwer zu lesen. Zerlege es in zwei Funktionen mit sprechenden Namen und rufe sie auf.
Es soll hinterher genau dasselbe tun. Der Unterschied ist nur, dass man es dann versteht.
Funktionen mit Werten
Eine Funktion, die immer haargenau dasselbe tut, hilft nur begrenzt. Richtig nützlich wird sie, wenn du ihr beim Aufruf etwas mitgibst:
python
def vieleck(ecken, laenge):
for i in range(ecken):
forward(laenge)
right(360 / ecken)
vieleck(3, 100)
vieleck(8, 40)Die Namen in den Klammern hinter def heißen Parameter. Innerhalb der Funktion sind sie ganz normale Variablen — sie bekommen ihren Wert erst beim Aufruf. Eine Funktion, zwei Aufrufe, zwei ganz verschiedene Figuren.
Ein Vieleck auf Bestellung
Diese Funktion zeichnet immer dasselbe Sechseck. Gib ihr zwei Werte mit, damit du auch ein Dreieck oder ein Zwölfeck bestellen kannst.
Funktionen, die antworten
Bisher haben Funktionen etwas getan. Sie können stattdessen auch etwas ausrechnen und zurückgeben — mit return:
python
def winkel(ecken):
return 360 / eckenreturn beendet die Funktion sofort und liefert den Wert an die Stelle zurück, an der sie aufgerufen wurde. winkel(6) ist danach genauso gut eine Zahl wie 60, und du kannst damit rechnen oder sie an right() weitergeben.
Karas Sensoren sind übrigens genau solche Funktionen: onBerry() tut nichts, es antwortet — mit True oder False. Und eigene kannst du auch schreiben.
Eine Funktion, die antwortet
Ergänze winkel() so, dass sie den passenden Drehwinkel für ein Vieleck liefert, und benutze sie unten.
Dein eigenes Bild
Jetzt hast du Werkzeug. Baue aus deinen eigenen Funktionen ein Bild — eine Blume aus Vielecken, ein Haus, was du magst.
Schreib dabei jede Form, die mehr als einmal vorkommt, als Funktion. Am Ende soll man am Hauptteil deines Programms ablesen können, was entsteht.
Noch mehr üben
Gehe n Schritte
Schreibe eine Funktion gehe(n), die Kara genau n Schritte laufen lässt.
Ist vorne frei?
Ergänze die Funktion so, dass sie True liefert, wenn vor Kara kein Baum steht. Benutze sie danach als Bedingung einer Wiederholung — while freiVorn(): liest sich besser als alles andere.