Achtung
Don't name your turtle program “turtle.py”!
If there is any file in your python folder with this name, rename or delete it!1)
Falls es wirklich nicht in Visual Studio Code klappen sollte, hier sind etwas weniger komfortable Alternativen:
- Programm ausführen wie am Anfang dieses Kurses erklärt (wohl drei Alternativen: Aus Kommandozeile (cmd), per Anklicken im Explorer (= Dateimanager), aus python-Shell.
- gesamtes Programm in die Python-Shell kopieren (Ctrl+a und Ctrl+c in VSCode, danach Ctrl+v in Python-Shell). Achtung bei Einrückungen (Schleifen, if-statements, Funktionen): Nach dem eingerückten Code muss eine Leerzeile stehen.
- Über ein Online-Tool, etwa
- https://trinket.io/turtle. Dort funktioniert Turtle-Grafik, jedoch nicht der Befehl
exitonclick
. Versuche “Expand”. - https://pythonsandbox.com/turtle. Dort funktioniert jedoch
from turtle import *
nicht …
Wer ein anderes brauchbares Online-Tool findet, teile mir dies bitte mit, damit ich es in die obige Liste aufnehme.
Turtle-Grafik
Turtle-Grafik meint, dass man mit einer “Turtle” (alias Schildkröte), die über den Bildschirm “läuft”, eine Zeichnung anfertigt. Man kann dieser Turtle Befehle wie “Gehe 100 Pixel vorwärts!” oder “Drehe dich um 30 Grad nach rechts!” geben. Die Turtle zeichnet mit einem Stift, den sie aber auf Befehl anhebt bzw. absenkt.
Turtle-Befehle lernen und Haus des Nikolaus zeichnen
(1) Das folgende Programm vermittelt dir die wichtigsten Turtle-Befehle. Lass es laufen und verstehe, was welcher Befehl bewirkt!
from turtle import * # Importiert die Turtle-Befehle speed(1) # Optionaler Befehl, setzt die Geschwindigkeit der Turtle. # Slowest animated speed ist 1; fastest animated speed is 10; # even faster is speed 0, but then the turtle "jumps" instead of moving smoothly. shape("turtle") # Optionaler Befehl, sorgt dafür, dass das zeichnende Gebilde # wie eine Schildkröte aussieht. Alternativen sind "arrow", # "circle", "square", "triangle", "classic". a = 100 forward(a) left(60) forward(a) right(120) forward(a) left(60) penup() backward(0.5 * a) pendown() left(90) pencolor("yellow") pensize(10) left(60) forward(a) right(120) forward(a) left(60) forward(a) exitonclick() # Sorgt dafür, dass das Zeichenfenster nicht sofort nach dem Zeichnen geschlossen wird, # sondern erst nach Klick an beliebiger Stelle auf das Zeichenfenster.
(2) Ändere das obige Programm so, dass das Haus des Nikolaus mit Grundseite der Länge a
gezeichnet wird (ohne Abzusetzen soll jede Linie nur einmal gezeichnet werden). Eventuell ist es einfacher, sich erst auf einem Blatt Papier die nötigen Befehle zu überlegen und dann ein neues Programm zu schreiben.
Wenn man den Wert der Variablen a
im Programm verändert, muss sich die Grösse der Zeichnung entsprechend ändern!
Das Dach soll rot gezeichnet werden, der Rest in einer anderen Farbe deiner Wahl, die Stiftdicke ist 10. Das Haus soll horizontal zentriert im Zeichenfenster erscheinen.
Herz zeichnen
Verstehe das folgende Programm und schreibe dann ein neues Programm, das ein rot ausgefülltes Herz mit gelbem Rand der Dicke 10 zeichnet. Überlege dir zuerst auf einem Blatt Papier, wie du das Herz zeichnen willst.
from turtle import * speed(1) # Slowest animated speed ist 1; fastest animated speed is 10; even faster is speed 0, but the turtle jumps. shape("turtle") setheading(45) # Dreht die Turtle so, dass sie in Richtung 45 Grad schaut. (Null Grad ist horizontal nach rechts, 90 Grad vertikal nach oben.) pencolor("blue") fillcolor("green") begin_fill() # Siehe Erklärung zu end_fill() unten. forward(100) circle(50, 90) # Zeichnet "linksherum" einen Kreis mit Radius 50 (mit Mittelpunkt 50 links der Turtle). Nur 90 Grad des Kreises werden gezeichnet. forward(100) left(90) forward(200) circle(50, 180) circle(-50, 90) # Da der Radius hier negativ ist, wird der Kreis "rechtsherum" gezeichnet. end_fill() # Füllt die ab dem Befehl begin_fill() gezeichnete Form. exitonclick()
$n$-Eck zeichnen
(Benötigt for- oder while-Schleife - das im Hinweis Erklärte sollte ausreichen.)
Ergänze das folgende Programm so, dass ein n
-Eck der Seitenlänge a
gezeichnet wird.
Teste dein Programm, indem du die Werte von n
und a
änderst.
from turtle import * n = 7 a = 100
Spirale zeichnen
(Benötigt for- oder while-Schleife - eventuell ist das Slalomtext-Programm nützlich.)
Schreibe ein Python-Programm, das eine “quadratische Spirale” mit der Turtel zeichnet: Die kleinste Seite soll a
lang sein, die Seitenlänge soll jeweils um veraenderung
wachsen und es sollen n
Strecken gezeichnet werden.
Beispielsweise soll für a = 30
, veraenderung = 10
und n = 20
die folgende Zeichnung entstehen.
Kannst du am Ende die Gesamtlänge der gezeichneten Spirale ausgeben? (im normalen Terminal per print(…)
.)
Zusatz: Ändere dein Programm so, dass die folgenden Bilder gezeichnet werden (“Sechseck-Spirale” und “leicht verdrehte” Version davon).
Es folgen 5 von der Idee her jeweils gute, aber leider syntaktisch fehlerhafte Programme zum Zeichnen der Spirale wie oben gefordert (dreimal mit for-Schleife, zweimal mit while-Schleife). Korrigiere diese Programme “im Sinne des Autors” und löse gegebenenfalls die Zusatzaufgaben!
- spirale-mit-for-fehlerhaft-1.py (gut wäre auch eine andere Dateinamenserweiterung …)
Bonus-Material
Such dir aus den folgenden Aufgaben heraus, was dir gefällt!
Male eine nette Zeichnung deiner Wahl mit der Turtle!
Stern zeichnen
(Nächstes Mal besser: Zwei Parameter, $n$ für ein $n$-Eck, auf dessen Ecken die Zacken liegen, und $m$ gibt an, wie viele Ecken man jeweils weiter geht. Drehwinkel ist $\frac{m \cdot 360^\circ}n$. (Lass einen Schüler dies für $n=5$ und $m=2$ ablaufen, andere zählen, um wieviel Grad er sich insgesamt gedreht hat.)
Zeichne einen Stern mit n
Ecken, wobei $n$ eine ungerade2) Zahl ist. Für n = 11
soll die Ausgabe wie folgt aussehen (die Füllung wird auf meinem Rechner “automatisch” so wie im Bild, auf anderen Rechnern wird einfach der gesamte Stern gefüllt).
Koordinatensystem
Die Turtle bewegt sich in einem Koordinatensystem (auch wenn wir das bisher nicht benutzt haben).
Beispielsweise kann man sie mit dem Befehl goto(-100, 200)
an die Position $(-100, 200)$ bewegen.
Finde die maximalen und minimalen $x$- und $y$-Koordinaten heraus, die im Standardzeichenfenster sichtbar sind (du kannst beispielsweise ein möglichst grosses sichtbares Rechteck zeichnen).
Weitere Ideen (noch auszuformulieren)
- Schreibe deinen Namen mit der Turtle! Schreibe eine Nutzereingabe (Text oder Zahl) per Turtle graphisch auf den Bildschirm.
- Zeichne die sogenannte Wurzelschnecke (hilfreich: per
x, y = position()
bekommt man die aktuellen Koordinaten der Turtle; persetpos(x,y)
bewegt man die Turtle auf den Punkt $(x,y)$). - Wer die Grösse des Zeichenbereichs kennt: Male grosses Rechteck und lass die Turtle darin wie einen Gummiball herum“bouncen” (Reflexion an den Rändern). (Verwendet weitere Kontrollstruktur! Welche?) Benötigt Befehle zum Abfragen der aktuellen Position und Richtung (oder man führt genau Buch).
- (braucht wohl Funktionen, da Aufruf per
onkey
) Tastatursteuerung der Turtle (eine Art Malprogramm, Ändern von Dicke per “t” (alias thickness) bzw. Farbe per “c” (alias color), eventuell (Turtlebefehl)textinput(…)
verwenden.
Wer mehr wissen will
Weitere Befehle (etwa hideturtle()
, showturtle()
, write(…)
) werden in der offiziellen Dokumentation der Turtle-Bibliothek erklärt: https://docs.python.org/3/library/turtle.html#turtle.filling
Welche Farbenwörter man verwenden darf, findet man hier: https://www.tcl.tk/man/tcl8.4/TkCmd/colors.html
Link zur Kursseite
All dies lässt sich mit komplexen Einheitswurzeln begründen: Die Punkte, an denen die Schildkröte dreht, gehen nacheinander durch Multiplikation mit einer fixen $n$-ten Einheitswurzel auseinander hervor. Nun kommt es darauf an, ob diese Einheitswurzel primitiv ist, was mit den genannten ggT-Bedingungen geprüft werden kann.