In diesem Blog lernst Du, wie man mit der Schildkröte (dem Cursor) Punkte zeichnen und Stempelabdrücke hinterlassen kann.
Inhaltsverzeichnis
Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics » und gehört zur Lektion 2, Themenblock 3 (L2T3).
Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.
Im Blog hat es ergänzende Hinweise für Kursteilnehmer, jeweils in roter Farbe:
- Aufgaben zum Einüben und zur Veranschaulichung des Gesagten.
- Zusatzmaterialien zur Lektion oder zum Themenblock (in der Regel für jüngere Kursteilnehmer)
Einordnung
In den letzten zwei Themenblöcken bzw. Blogbeiträgen (K103: Schildkröte bewegen und K103: Kreise, Teilkreise, Polygone) haben wir Geraden (gerade Linien) und Kreise bzw. Teilkreise gezeichnet. Hier sollen nun noch die zwei Themen «Punkte» und «Stempel» erläutert werden. Mit Geraden, Teilkreisen und Punkten haben wir dann das Rüstzeug erarbeitet, um beliebige geometrische Formen zu zeichnen.
Punkte zeichnen mit dot()
Turtle Graphics bietet eine einfache Möglichkeit, um an der aktuellen Position des Cursors einen grösseren Punkt (ausgefüllten Kreis) zu zeichnen. Die Anweisung dot() (von engl. «dot»: «Punkt») zeichnet einen kreisförmigen Punkt. Sie hat die folgende Syntax:
turtle.dot(size=None, *color)
Schreibt man einfach nur dot() ohne Angabe eines Werts in den Klammern, so zeichnet Turtle Graphics einen Punkt in der Standardgrösse.
Man kann aber auch die Grösse definieren, indem man in die Klammern einen Wert schreibt. Der kreisförmige Punkt hat dann die Durchmessergrösse size (Achtung: nicht Radius!). Der Wert size muss eine Ganzzahl >=1 sein.
Zu guter letzt kann man optional noch eine Farbe angeben. Hierzu ein kleines Beispiel:
from turtle import * # und los geht's dot(30) forward(100) dot(30) left(120) forward(100) dot(15, "green") left(120) forward(100) # Abschluss exitonclick()
Das Programm führt zu folgender Ausgabe:

Es gibt also mehrere Möglichkeiten:
-
einfach nur einen Punkt zeichnen: dot()
Die Punktgrösse ist die Standardgrösse. Die Punktfarbe ist die aktuelle Farbe des Zeichenstifts (siehe nächste Lektion). -
einfach nur einen Punkt in einer Farbe zeichnen: z.B. dot("blue")
Die Punktgrösse ist die Standardgrösse. Die Punktfarbe ist die Farbe "blue" (blau). -
einen Punkt in einer gewissen Grösse zeichnen: z.B. dot(10)
Die Punktgrösse ist 10 Die Punktfarbe ist die aktuelle Farbe des Zeichenstifts (siehe nächste Lektion). -
einen Punkt in einer gewissen Grösse & Farbe: z.B. dot(10, "blue")
Die Punktgrösse ist 10 Die Punktfarbe ist die Farbe "blue"Hier ist die Reihenfolge wichtig. Man kann nicht dot("blue", 10) schreiben. Bei 2 Angaben kommt also immer zuerst die Grösse.
Es gibt übrigens viele mögliche Farben. Beispielsweise «green», «blue», «red», «yellow» oder «orange». Wir werden das Thema Farben in der nächsten Lektion noch im Detail anschauen. Aber beachte: Der Name der Farbe muss zwischen Anführungs- und Schlusszeichen geschrieben werden (sofern man einen Namen hinschreibt). Und in Frage kommen nur englische Namen.
- Löse nun die Aufgaben 1 und 2, um dich mit der Anweisung vertraut zu machen.
Was ist die Standardgrösse?
Wird bei size kein Wert angegeben, so nimmt Python den grösseren Wert zwischen pensize + 4 und 2 * pensize. Der Parameter pensize steht für die Dicke des Strichs. Bei einer Strichdicke von 1 Punkt hat der durch die dot() Anweisung gesetzte Punkt eine Grösse von 5 Punkten.
Der zweite Parameter definiert wie erwähnt die Punktfarbe. Die Farbe kann man als Colorstring oder als numerisches Farbtupel angeben. Wir werden auf die Themen in der nächsten Lektion noch eingehen.
Stempel setzen mit stamp()
Anstelle eines Punktes kann man auch eine Kopie der Schildkrötenform an der aktuellen Cursorposition auf die Leinwand «stempeln». Hierzu nutzt man die Anweisung stamp() (von engl. «stamp»: «Stempel»). Sie hat die folgende Syntax:
turtle.stamp()
Nachfolgend unser Dreiecksbeispiel mit Stempelabdrücken anstelle der Punkte:
from turtle import * # und los geht's stamp() forward(100) stamp() left(120) forward(100) stamp() left(120) forward(100) # Abschluss exitonclick()
Das Programm führt zu folgender Ausgabe:

- Löse nun die Aufgabe 3, um dich mit der Anweisung vertraut zu machen.
Ergänzender Hinweis für Fortgeschrittene: Identifikationsnummer des Abdrucks
Im Unterschied zur dot() Anweisung kann man hier keine Werte übergeben. Dafür gibt die Funktion eine stamp_id für jeden Stempelabdruck zurück. Das ist eine fortlaufende Nummer, anhand welcher man jeden gemachten Abdruck eindeutig identifizieren kann. Man sieht es am besten, wenn man die Anweisung im interaktiven Python Interpreter eingibt.

stamp()
schreiben wir somit:
meinStempel = stamp()
Stempel löschen
Zum löschen eines/ mehrerer Abdrücke kann man die Funktion clearstamps() – mit einem s am Ende – verwenden. Sie hat die folgende Syntax:
turtle.clearstamps(n)
clearstams(n) lösche alle, die ersten oder die letzten von n Stempeln. Der Parameter n gibt hier eine Zahl an. Ist die Klammer leer, so werden alle gelöscht. Ist n > 0, so werden die ersten n Stempel, ansonsten die letzten n Stempel gelöscht.
Hierzu ein kleines Beispiel, in welchem die ersten 2 von 4 Abdrücken wieder gelöscht werden:
from turtle import * stamp() forward(10) stamp() forward(20) stamp() forward(30) stamp() forward(30) clearstamps(2) exitonclick()
- Löse nun die Aufgabe 4. Für Fortgeschrittene: Aufgabe 5.
Ergänzender Hinweis für Fortgeschrittene: Löschen eines bestimmten Abdrucks
Manchmal möchte man auch einen ganz bestimmten Stempelabdruck löschen. Zum löschen eines bestimmten Abdrücks nutzt man die Funktion clearstamp() – ohne s am Ende! – . Sie hat die folgende Syntax:
turtle.clearstamp(stamp_id)
Hierzu ein Beispiel:
from turtle import * forward(100) a = stamp() forward(50) clearstamp(a) done()
Der Aufruf stamp() in Zeile 4 stempelt den Umriss der Turtle an der aktuellen Position und gleichzeitig wird eine Stempelnummer zurückgegeben. Diese stamp_id legen wir in der Variable a ab, indem wir die Zuweisung a = dem Aufruf voranstellen.
Die Anweisung clearstamp(a) in Zeile 6 löscht den Stempel mit der Nummer, welche in der Variable a abgelegt ist.
- Löse nun die Aufgabe 6
Übungsaufgaben
Nachfolgend findest Du ein paar Übungsaufgaben.
Lösungen zu den Aufgaben findest du im Kurs K103 «Programmieren mit Turtle Graphics «:
Lektion 2, Themenblock 3 (L2T3).
Aufgabe 1: Rechteck mit Punkten
Versuche die rechts abgebildete Figur nachzuzeichnen. Es ist ein Rechteck mit der Länge von 100 und der Höhe von 50 Punkten. In der ersten Ecke ist ein Punkt (ohne Angabe von Punktgrösse), in der zweiten Ecke ein Punkt mit Durchmesser 5, in der dritten und vierten Ecke ein Punkt mit Radius 5.

Aufgabe 2: Rechteck mit farbigen Punkten
Aufgabe 3: Halbkreis mit Stempeln

Aufgabe 4: Halbkreis mit Stempeln bereinigt
Gegeben ist der Halbkreis aus Aufgabe 2. Lösche nun am Ende die ersten zwei Stempelabdrücke.
Aufgabe 5: Halbkreis mit Stempeln und zurück
Ausgangspunkt bildet Aufgabe 1. Nun soll die Schildkröte wieder zurückfahren und dabei die einzelnen Stempel der Reihe nach wieder löschen. Am Ende hat man einen Halbkreis ohne Stempel. Der Stempel im Bild rechts ist die Schildkröte selber (kein Abdruck).

Aufgabe 6: Kreis mit Stempeln
Zeichen einen Kreis mit 4 Stempelabdrücken (nach jedem Viertelkreis ein Abdruck).
Lösche dann den zweiten und dritten Abdruck.