Eine Exkursion mit Schildkröte #
Da du offensichtlich schon bis hierher gekommen bist, ist es an der Zeit, dir Gedanken zu machen, wohin du mit dem Programmieren kommen möchtest. Eric Matthes, Autor des weit verbreiteten Buches »Python Crash Course«, empfiehlt, sich ein eigenes Projekt vorzunehmen. Versuche, etwas für dich bedeutsames zu finden! Das wird dir helfen, weiterzumachen, wenn die Motivation weiter zu lernen einmal nicht mehr so stark sein sollte.
Vielleicht zeichnest du gerne? Dann könnte das hier etwas für dich sein…
Eine Konsole mit Schildkröte #
Eine Computerschildkröte mit einem Stift, zusammen mit Seymour Papert, einem ihrer Erfinder.
Quelle: Wikipedia, beschnitten und verkleinert, veröffentlicht unter CC BY-SA 3.0
Eine Möglichkeit, über Bilder am Bildschirm zu denken, ist die, jedes Bild in Pixel zu zerlegen, und sich jedes Pixel als eine Art kleines Lämpchen vorzustellen. Das wird ziemlich schnell unübersichtlich…
Turtlegraphics ist eine andere Art, sich eine Vorstellung von Grafik am Computer zu machen, die etwas schöner zu überblicken ist. Stell’ dir eine Schildkröte vor, an der ein Stift befestigt ist. Wenn die Schildkröte läuft, zieht sie den Stift hinter sich her und erzeugt so Linien.
In Python findest du ein Modul für solche turtle-graphics, das du ohne große Umwege nutzen kannst.
Gib doch einmal folgende Befehle im REPL ein (natürlich und wie immer ohne >>>
):
>>> import turtle
>>> turti = turtle.Turtle()
Jetzt sollte sich ein Fenster mit einer kleinen Figur geöffnet haben. Mit dem import
-Befehl lassen sich Module laden, und dann über die Punktschreibweise (turtle.Turtle()
) ansprechen. Mit diesem Befehl (turtle.Turtle()
) erzeugst du eine Turtle – das ist die kleine Figur in der Mitte. Damit du der Turtle nun Anweisungen geben kannst, speicherst du sie in der Variablen turti
.
Damit die Figur auch noch nach Schildkröte (nach einer turtle) aussieht, kannst du an der Figur turti
die Funktion (Programmierer_innen sagen in so einem Fall auch: Methode) shape
aufrufen, und zwar so:
>>> turti.shape('turtle')
Und nun kann es losgehen! Hier sind einige Befehle, die die Turtle versteht. Die Abkürzungen sparen Tipparbeit…
Befehl | Abkürzung | Wirkung: die Turtle… |
---|---|---|
forward(100) | fd(100) | …bewegt sich 100 Pixel nach vorne. |
back(100) | bk(100) | …bewegt sich 100 Pixel zurück. |
left(45) | lt(45) | …dreht sich um 45 Grad nach links. |
right(10) | rt(10) | …dreht sich um 10 Grad nach rechts. |
penup() | up() | …hebt den Stift hoch. |
pendown() | down() | …senkt den Stift. |
begin_fill() | …kann nun eine ausgefüllte Figur beginnen. | |
end_fill() | …schließt die ausgefüllte Figur ab. |
Übrigens gibt es noch sehr viel mehr Dinge, die deine Turtle beherrscht. Wenn du in Thonny (Editor oder Kommandozeile)…
>>> turti.
…eingibst, und dann TAB
oder strg
+Leertaste
drückst, bekommst du eine Liste mit allen Turtle-Methoden angezeigt. Unter https://docs.python.org/3/library/turtle.html findest du auch eine sehr ausführliche (englische) Dokumentation aller Turtle-Methoden.
Aufgabe: Zwei Dreiecke #
Zeichne einige Figuren, in dem du deiner Turtle im REPL Befehle erteilst. Sollte dir nichts eigenes einfallen, orientiere dich am Beispielbild!
Tipp 1
Denke immer daran, die Punktschreibweise zu nutzen, z.B. so:
>>> turti.lt(60)
>>> turti.fd(100)
Tipp 2
Die Dreiecke kannst du schneller zeichnen lassen, indem du eine for
-Wiederholung benutzt. Da du die Variable nicht brauchst, ist es in Python üblich, hier einen Unterstrich _
zu verwenden. i
oder irgendein anderer Name funktioniert aber auch.
>>> for _ in range(3):
turti.fd(100)
turti.rt(120)
Lösungsvorschlag
# Diese Anweisungen kannst du entweder
# auf der Konsole eintippen oder
# in einer Datei speichern und ausführen
import turtle
turti = turtle.Turtle()
turti.shape('turtle')
# zur Startposition erstes Dreieck gehen
turti.up()
turti.lt(60)
turti.fd(50)
# Das erste Dreieck zeichnen
turti.down()
for _ in range(3):
turti.fd(100)
turti.lt(120)
# Umdrehen und zum Startpunkt zweites Dreieck gehen
turti.up()
turti.lt(180)
turti.fd(100)
# Zweites Dreieck zeichnen
turti.down()
turti.begin_fill()
for _ in range(3):
turti.fd(100)
turti.rt(120)
turti.end_fill()
# Zum Anfangspunkt zurücklaufen
turti.up()
turti.lt(180)
turti.fd(50)