K103: Punkte und Stempel

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:

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:

Punkte

Es gibt also mehrere Möglichkeiten:

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.

Ergänzender Hinweis für Fortgeschrittene: Standardgrösse des Stifts

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:

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.

Mit anderen Worten: erteilt man dem Computer die Anweisung stamp(), so «stempelt» dieser die Form des Cursors auf den Bildschirm und gibt anschliessend noch eine id zurück. Diese id (Im Beispiel die Zahl 5) ist ein eindeutiger Wert, welche auf den jeweiligen Stempel verweist. Sie lässt sich verwenden, um einen Abdruck bei Bedarf wieder zu löschen. Möchte man, dass Python sich diese Zahl merkt, so muss man den Wert irgendwo «ablegen». Wir nutzen hierzu eine Variable (mehr zum Thema Variablen später). Das geht ganz einfache, indem man einen Namen wählt und diesen der Zahl mit einem Gleichheitszeichen zuweist. Anstelle von
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()

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.

Ü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

Gegeben ist das Rechteck aus Aufgabe 1. Versuche nun die Punkte in verschiedenen Farben zu zeichnen. Nutze hierzu die Farben «blue», «red», «green» und «yellow».

Aufgabe 3: Halbkreis mit Stempeln

Versuche den rechts abgebildeten Halbkreis zu zeichnen. Der Halbkreis hat einen Radius von 80 Punkten. Am Anfang, in der Mitte und am Ende machst du jeweils einen Stempelabdruck.
Halbkreis

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.