Einfaches Zeichnen mit turtle

Einführung

Turtle ist wie ein Zeichenbrett.

Das Modul besitzt Funktionen wie turtle.forward(...) und turtle.left(...) welche die Schildkröte umher bewegen.

Bevor du turtle benutzen kannst musst du es importieren. Wir empfehlen erstmal mit ihr in einem interaktiven Interpreter herumzuexperimentieren, da ein bisschen zusätzliche Arbeit notwendig ist um aus Dateien zu arbeiten. Gehe in deine Konsole und tippe:

import turtle
_images/default.png

Bemerkung

Du siehst nichts unter Mac OS? Probier einen Befehl wie turtle.forward(0) zu erteilen und zu schauen, ob sich ein neues Fenster hinter deiner Kommandozeile geöffnet hat.

Bemerkung

Arbeitest du mit Ubuntu und hast die Fehlermeldung “No module named _tkiner” bekommen? Installier das fehlende Paket mit sudo apt-get install python3-tk

Bemerkung

Auch wenn es verlockend ist einfach alles auf dieser Seite in dein Terminal zu kopieren würden wir dich ermutigen, alle Befehle selbst zu tippen. Tippen bringt die Syntax in deine Finger (um das Muskelgedächtnis aufzubauen!) und kann sogar helfen komische Syntaxfehler zu vermeiden.

turtle.forward(25)
_images/forward.png
turtle.left(30)
_images/left.png

Die Funktion turtle.forward(...) weist die Schildkröte an, sich eine gewisse Distanz vorwärts zu bewegen. turtle.left(...) erwartet einen Winkel, den du nach links drehen willst. Es gibt außerdem noch turtle.backward(...) und turtle.right(...).

Bemerkung

Du willst neu anfangen? Du kannst turtle.reset() eintippen um die Zeichnungen, die deine turtle bisher gemacht hat, zu löschen. Wir werden turtle.reset() gleich detaillierter beleuchten.

Standardmässig wird die Schildkröte auf dem Bildschirm als Dreieck dargestellt. Wie langweilig! Lass uns mit der Funktion turtle.shape() eine richtige Schildkröte daraus machen:

turtle.shape("turtle")

Das ist doch viel niedlicher!

Wenn Du die Befehle in eine Datei geschrieben hast, hast Du vielleicht bemerkt, dass das turtle-Fenster verschwindet, nachdem die Schildkröte ihre Bewegung vollendet hatte. (Das geschieht weil Python beendet wird, sobald der letzte Befehl ausgeführt wurde. Und da das turtle-Fenster mit zu Python gehört, wird es auch geschlossen.) Um das zu verhindern, füge am Ende Deines Programms turle.exitonclick() hinzu. Jetzt bleibt das Fenster offen bis Du noch einmal darauf klickst:

import turtle

turtle.shape("turtle")

turtle.forward(25)

turtle.exitonclick()

Bemerkung

Python ist eine Programmiersprache in der horizontale Einrückung des Textes wichtig ist. Wir werden alles darüber später im Kapitel “Funktionen” lernen, behalte bis dahin im Kopf das herumirrende Leerzeichen oder Tabs vor einer Zeile Pythoncode einen unvorhergesehenen Fehler auslösen können.

Ein Rechteck zeichnen

Bemerkung

Niemand erwartet von Dir, dass Du sofort auf die Antwort kommst. Lerne durch Ausprobieren! Experimentiere damit was Python tut wenn Du verschiedene Befehle erteilst, was zu schönen (wenn auch manchmal unerwarteten) Ergebnissen führt, und was Fehler verursacht. Wenn Du etwas findest dass für Dich interessante Ergebnisse erzeugt und Du weiter damit herumprobieren möchtest, ist das auch in Ordnung. Zögere nicht etwas zu versuchen, und daraus zu lernen falls es schief geht!

Übung

Zeichne ein Quadrat so wie im folgenden Bild:

_images/square.png

Für ein Viereck brauchst du vermutlich einen rechten Winkel, welcher 90˚ beträgt.

Lösung

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

Bemerkung

Beachte wie die Schildkröte an der gleichen Stelle in der gleichen Richtung startet und nach Zeichnen des Quadrats stoppt. Dies ist als Konvention nützlich, denn es erleichtert das Zeichnen von mehreren geometrischen Formen hintereinander.

Bonus

Falls Du kreativ werden möchtest, kannst Du die geometrische Form mit den Funktionen turtle.width(...) und turtle.color(...) verändern. Wie kannst Du diese Funktionen verwenden? Bevor Du eine Funktion benutzen kannst, musst Du ihre Signatur (zum Beispiel die Anzahl und Bedeutung ihrer Parameter). Um das herauszufinden kannst Du in der interaktiven Python Shell help(turtle.color) eingeben. Falls sich dort eine grosse Menge Text befindet, schreibt Python den Hilfetext in einen Pager, in welchem Du auf- und abscrollen kannst. Drücke die Taste q um den Pager wieder zu verlassen.

Tipp

Siehst du ungefähr folgenden Fehler:

NameError: name 'turtle' is not defined

In Python musst Du Namen von Modulen oder Funktionen importieren bevor Du sie verwenden kannst. Also musst Du in einem neuen Python-Shell Fenster zuerst import turtle schreiben, bevor help(turtle.color) funktioniert.

Ein anderer Weg die Funktionen herauszufinden ist die online documentation.

Vorsicht

Falls Du etwas falsch gezeichnet hast, kannst Du turtle befehlen, die Zeichenfläche mit dem turtle.reset() Befehl vollständig zu löschen oder den letzten Befehl mit turtle.undo() Rückgängig zu machen.

Tipp

Wie du vielleicht in der Hilfe gelesen hast, kannst du die Farbe mit turtle.color(colorstring) ändern. Das könnte unter Anderem “red”, “green” oder “violet” sein. Schau in das colours manual für eine ausführliche Liste.

Ein Rechteck zeichnen

Übung

Kannst du auch ein Rechteck zeichenn?

_images/rectangle.png

Lösung

turtle.forward(100)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

Bonus

Wie wäre es mit einem Dreieck? In einem gleichseitigen Dreieck (alle Seiten haben die gleiche Länge) hat jede Ecke einen Winkel von 60 Grad.

Mehr Quadrate

Übung

Jetzt zeichne ein schräg zur Seite gekipptes Quadrat. Und noch eins, und noch eins. Experimentiere mit den Winkeln zwischen den einzelnen Quadraten.

_images/tiltedsquares.png

Das Bild zeigt drei Drehungen um jeweils 20 Grad. Du kannst zum Beispiel auch 20, 30 oder 40 Grad ausprobieren.

Lösung

turtle.left(20)

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

turtle.left(30)

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

turtle.left(40)

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)