Mit den Schildkröten bzw. dem Turtle Modul von Python, kann man zu beginnen, erste Schritte im Thema Programmieren machen. Häufig wird zu Anfang gerade auch für Kinder mit Scratch und Swift Playgrounds sehr grafische Interfaces empfohlen um mal nach Links, Rechts, Oben und Unten zu gehen. Genau dafür ist Turtle mit einer einfachen grafischen Oberfläche da, weshalb es sich gerade für Anfänger anbietet. Der große Vorteil gegenüber Anwendungen wie Scratch und Swift Playgrounds ist, dass direkt in einer Umgebung programmiert werden kann, wie es später auch wäre, das kann den Einstieg erleichtern.
Durch das Zeichnen von Abläufen könne verschiedenste Figuren erstellt werden, als Beispiele habe ich einmal einen Ablauf erstellt, der an eine Audioaufzeichnung erinnern soll.
ChatGPT: Zeichne ein Märchenschloss mit einem Fluss, der durch das ganze Bild geht, dort hinter steht das Schloss. Das Schloss ist in einem Braunton und hat eine Backsteinwand.
Noch ist es nicht notwendig, euch Sorgen zu machen, um eure Jobs zu machen, wenn ihr Programmieranfänger seid. Das als erstes Beispiel zur Turtle, nun zeige ich dir, wie deine Schildkröte die ersten Schritte machen kann.
Zu Beginn benötigst du keine direkte Installation von dem Turtle Modul, allerdings sollte Tkinter auf deinem System installiert sein, diese kannst du mit den folgenden Schritten ausführen, falls das erste Testprogramm mit folgender Meldung ModuleNotFoundError: No module named '_tkinter' fehlschlagen sollte, muss geprüft werden, ob deine Konfiguration richtig ist. Je nach Python Version wirst du auch sehr explizit darauf hingewiesen. In meinem Fall, als es mir passiert ist, hing es damit zusammen, dass ich pyenv verwende unter MacOS und keine passende Installation und Konfiguration gesetzt wurde bei der Installation der Python Version.
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
In meinem Fall hatte die folgende Antwort von Stack Overflow geholfen: https://stackoverflow.com/a/60469203
Um zu starten, müssen wir nur Turtle importieren und können einen Ablauf programmieren. Um es dir am Anfang zu vereinfachen, da es auch keine Performance kritische Anwendung ist, kannst du einfach alles aus dem Turtle Modul importieren. Bei einer späteren professionellen Verwendung solltest du nur die Teile von Modulen laden, die du auch wirklich benötigen wirst.
from turtle import *
Nun benötigen wir Begrifflichkeiten, um die Schildkröte bewegen zu können. Dafür gibt es forward()
und backward()
in die Klammern setzt du ein Int oder Float ein, um zu definieren, welche Distanz zurückgelegt werden soll.
forward(100)
backward(100)
Mit dieser Bewegung können wir jetzt vor- und zurückgehen.
Es fehlt uns eine Option, um Drehungen zu realisieren, um in verschiedenste Richtungen gehen zu können. Dafür können wir die Funktion left
und right
verwenden. Wie der Name schon sagt, kann dort ein Wert eingegeben werden, der einer Gradzahl entspricht, um die sich die Schildkröte drehen soll, anschließend kannst du zum Beispiel wieder forward oder backward verwenden, um einen entsprechenden Strich zu zeichnen. Wenn du zum Beispiel forward mit left von 90 Grade verbindest, kannst du ein Quadrat oder Rechteck erstellen, mit vier Wiederholungen.
for i in range(0,4):
forward(100)
left(90)
Das Ergebnis würde aussehen, wie in dem Screenshot, wenn du die Gradzahl deutlich geringer einstellst, zum Beispiel auf 3 und das nach Vorn gehen auf einen Wert von 5 und die Wiederholung auf zum Beispiel 120 kannst du so auch einen Kreis erstellen.
Die Spirale sieht für dich wahrscheinlich erst einmal sehr komplex in der Erstellung aus, aber so komplex ist diese gar nicht, du brauchst „nur“ Halbkreise, die du mit immer kleineren Radien aneinander setzt.
Um das zu vereinfachen und nicht mit left
und forward
die Halbkreise erzeugen zu müssen, gibt es eine separate Funktion circle
. Als erster Parameter kann ein Radius gesetzt werden und optional als zweiter Parameter eine Gradzahl, zum Beispiel 180° für einen Halbkreis (ein ganzer Kreis hat doch wie bekannt 360° Grad). Als dritter Parameter kann noch eine Schrittanzahl definiert werden, den letztlich kennt der Computer nur Geraden, aber dadurch das, die Gerade so kurz ist, entsteht der Eindruck eines Kreises. Wenn du zum Beispiel nur 4 Schritte verwendest und einen kompletten Radius, entsteht ein Achteck.
Unsere Spirale können wir also mit folgendem Code erstellen, umso geringer die Steps eingestellt werden in der Range umso dünner werden die Abstände zwischen den Linien.
for i in reversed(range(0, 400, 5)):
print(i) # 395, 390, 385, 380, ..., 5, 0
circle(i,180)
Um einen Text zu schreiben mit der Turtle gibt es eine simple write
Methode. Als ersten Parameter gibt man den Text, an, den man Schreiben möchte.
Weitere mögliche Parameter sind:
write("Hello World!", font=("Barlow", 20, "normal"))
Die Positionierung basiert auf der aktuell aktiven Schildkröte.
Du hast nun gelernt, wie du verschiedene Bewegung realisieren kannst, mehr als diese Basis braucht es eigentlich nicht für komplexere Formen. Im folgenden Abschnitt wollen wir einmal betrachten, wie du das Styling der Zeichenfläche und der Schildkröte anpassen kannst.
Es gibt verschieden Symbole, die du für die Turtle verwenden kannst, standardmäßig ist es noch nicht mal eine Schildkröte, die sich über den Bildschirm bewegt, sondern ein Dreieck, das wollen wir ändern.
Es gibt 6 Symbole, die möglich sind: arrow, turtle, circle, sqaure, triangle, classic.
Die Funktion, um eine echte Schildkröte auf dem Bildschirm zu haben, heißt shape('turtle')
anschließende wechselt das Symbol. Es ist auch möglich, zwischendurch zwischen verschiedenen Shapes zu wechseln.
Um die Farben zu definieren, gibt es die color
Funktion mit dieser kannst du eine Stiftfarbe und eine Füllfarbe definieren.
color("#ef4136", "#EB958F")
Die Hintergrundfarbe kannst du mit bgcolor
definieren. Es gibt fest Farbwerte, die immer verwendet werden können, oder auch HEX Farben sind möglich.
Um die Dicke der Linien zu definieren, gibt es die pensize
dort drüber kann die Strichstärke definiert werden.
pensize(5)
Um nun das wissen, was ihr in diesem Artikel gesammelt habt, gebe ich euch noch eine Aufgabe mit an die Hand – unten findet ihr noch meine vollständige Lösung zu dieser Aufgabe. Schaut euch meine Ergebnisse erst an, wenn ihr nicht mehr weiter kommen solltet.
Der Screenshot zeigt sehr deutlich, was die Aufgabe ist, es geht darum etliche Schildkröten parallel gegen einander laufen zu lassen.
Folgende Schritte müssen programmiert werden:
goto
machen oder mit den Bewegung Optionen, die du bereits kennengelernt hast.pendown
und penup
so kannst du eine Schildkröte bewegen, ohne dass sie eine Linie zeichnet.turtle.pos()[0]
erhältst du die jeweilige X Position, um dieses Auszuwerten. Dafür benötigst du einen Zufallsoption – wie du einen Zufall generieren kannst, habe ich in dem Artikel „Zufällige Zahlen generieren in Python mit dem Random Modul“ beschrieben. Zusätzlich kannst du noch eine kleine zufällige Abweichung nach Links und Rechts implementieren, um die Spannung zu erhöhen. Ein Punkt wurde noch nicht erklärt, und zwar wie du mit mehreren Schildkröten arbeiten kannst. Hier einmal ein kurzes Code-Beispiel zeigt, dass du mittels der Funktion Turtle deine Schildkröten erstellen kannst, anschließende kannst du alle bekannten Methoden, auf die Schildkröten anwenden.
first = Turtle("turtle")
second = Turtle("turtle")
first.forward(10)
second.backward(10)
In meinem Lösungsvorschlag habe ich mir eine Funktion erstellt für die Startpositionen, da diese immer relative, in bestimmten Abständen zueinander platziert werden sollen.
Für die Gewinner Nachricht nutze ich die Schildkröte selbst kurz, um diese in einem bestimmten Abstand über der Schildkröte zu platzieren, anschließende verschiebe ich die Schildkröte wieder an ihre ursprüngliche Postion, ohne dass sie eine Spur hinterlässt durch penup
.
from random import randint
from turtle import *
def startPositon(turtle, line):
turtle.penup()
turtle.speed(100)
turtle.backward(600)
turtle.left(90)
turtle.backward(450)
turtle.forward(line * 5)
turtle.right(90)
turtle.forward(1)
turtle.pendown()
turtle.speed(3)
def setupMessage(turtle, name):
turtle.speed(200)
turtle.hideturtle()
turtle.penup()
turtle.left(90)
turtle.forward(10)
turtle.right(90)
turtle.forward(15)
turtle.write(name + " is Winning the Race!", font=("Barlow", 20, "normal"))
turtle.backward(15)
turtle.left(90)
turtle.backward(10)
turtle.right(90)
turtle.showturtle()
turtle.speed(3)
bgcolor("#323638")
# Erstellen der Schildkröten
ourTurtles = list()
ourTurtlesData = [
("sunny", "#FFD700"),
("ruby", "#AA0A20"),
("ocean", "#008080"),
("sky", "#87CEEB"),
("grass", "#8FBC8F"),
("lavender", "#E6E6FA"),
("peach", "#FFE5B4"),
("teal", "#008080"),
("coral", "#FF7F50"),
("emerald", "#50C878"),
("rose", "#FF007F"),
("indigo", "#4B0082"),
("mustard", "#FFDB58"),
("navy", "#000080"),
("maroon", "#800000"),
("silver", "#C0C0C0"),
("goldenrod", "#DAA520"),
("violet", "#EE82EE"),
("cherry", "#DE3163"),
("magenta", "#FF00FF"),
]
for i, data in enumerate(ourTurtlesData):
turtle = Turtle("turtle")
turtle.hideturtle()
turtle.color(data[1])
ourTurtles.append([turtle, data[0]])
startPositon(turtle, i * 10)
turtle.showturtle()
# Erstellen der Ziel Linie
line = Turtle()
line.hideturtle()
line.penup()
line.color("white")
line.speed(100)
line.goto(300, 1000)
line.pensize(5)
line.pendown()
line.right(90)
line.forward(2000)
while True:
for turtleItem in ourTurtles:
turtle = turtleItem[0]
name = turtleItem[1]
if turtle.pos()[0] >= 150:
turtle.forward(randint(-10, 30))
else:
turtle.forward(randint(-5, 50))
if randint(0, 75) == 10:
turtle.left(randint(0, 5))
if randint(0, 75) == 20:
turtle.right(randint(0, 5))
if turtle.pos()[0] > 300:
setupMessage(turtle, name)
done()
Die Turtle ist eine tolle Option um erste Abläufe kennen zulernen und ein Programm zu erstellen, wo du auch einen visuellen Ablauf auf deinem Bildschirm sehen kannst. Letztlich arbeiten Grafikprogramme nach ähnlichen Prinzipien, die Stärken der Linien und weiteres sind bei SVGs zum Beispiel gespeichert und anhand von Pfaden wird bestimmt, wie die Linie verläuft.
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Python mit Schildkröte und Turtle Modul, Abläufe programmieren!"!