Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Tortoise vs. Hare: Eine Python-Simulation mit turtle – Schritt-für-Schritt-Tutorial

Lerne mit diesem Python-Tutorial, wie du das klassische Rennen zwischen Schildkröte und Hase mit dem turtle-Modul simulieren kannst. Inklusive Funktionen, Zufallsbewegungen und grafischer Ausgabe – ideal für Programmieranfänger.

Python turtle Tortoise vs Hare Simulation Python Rennspiel turtle Modul Python Zufallsbewegung Python while-Schleife Python Python Funktionen Programmieraufgabe turtle Python Grafiken Schildkröte Hase Rennen Python Übung turtle Rennen Python Simulation Anfänger Python Projekt Python turtle Beispiel Python turtle Kurs

Einführung: Das klassische Rennen – jetzt mit Python und turtle

Du kennst die Fabel von der Schildkröte und dem Hasen? In dieser Programmieraufgabe setzt du das Rennen mit Python um – und zwar grafisch mit dem turtle-Modul. Die Schildkröte und der Hase rennen auf einem 200 Pixel langen Kurs bergauf, wobei sie durch Zufallsereignisse vor- oder zurückfallen können. Das Besondere: Du steuerst die Bewegung beider Tiere mit selbst geschriebenen Funktionen und einer while-Schleife. Am Ende siegt nicht unbedingt der Schnellste – denn der Zufall spielt mit. Dieses Tutorial führt dich Schritt für Schritt durch die Lösung, ohne dir die komplette Arbeit abzunehmen. Du lernst, wie du mit Python turtle Grafiken erstellst, Zufallszahlen einsetzt und Bedingungen richtig formulieren. Perfekt für dein nächstes Programmierprojekt oder als Vorbereitung auf die Klausur!

Projektübersicht: Was du bauen wirst

Dein Programm simuliert ein Rennen zwischen zwei Tieren auf einem Bildschirm. Der Kurs verläuft von x = -100 (Start) bis x = 100 (Ziel). Jedes Tier hat eine eigene Spur (y-Koordinate bleibt konstant). In jeder Runde (Iteration) wird per Zufall bestimmt, ob das Tier vorwärts oder rückwärts läuft. Die Bewegungstypen sind in der Aufgabenstellung vorgegeben: Die Schildkröte hat z. B. einen schnellen Trott (3 Schritte vor) mit 50% Wahrscheinlichkeit, der Hase kann schlafen (0 Schritte) oder große Sprünge machen. Dein Code muss die Positionen in zwei Funktionen berechnen, die Grafik mit turtle zeichnen und den Gewinner ermitteln. Das klingt machbar, oder? Legen wir los!

Vorbereitung: turtle-Modul und Fenster einrichten

Bevor das Rennen startet, musst du das turtle-Fenster konfigurieren. Importiere das Modul und setze die Fenstergröße und -titel. Erstelle dann mehrere turtle-Objekte: eines für die Schildkröte, eines für den Hasen und weitere für die Start-/Ziellinie und Textausgaben. Nutze hideturtle(), um die Objekte unsichtbar zu machen, die nur zeichnen sollen. Beispiel:

import turtle

window = turtle.Screen()
window.title("Tortoise vs. Hare – Das Bergrennen")
window.setup(width=600, height=400)
window.bgcolor("lightgreen")

# Turtle für die Schildkröte (sichtbar)
tortoise = turtle.Turtle()
tortoise.shape("turtle")
tortoise.color("green")
tortoise.penup()
tortoise.setpos(-100, 0)

# Turtle für den Hasen (sichtbar)
hare = turtle.Turtle()
hare.shape("classic")
hare.color("brown")
hare.penup()
hare.setpos(-100, 50)

Die y-Koordinaten bleiben während des Rennens unverändert – das verhindert „Schmutzige Tricks“. Die x-Koordinaten starten bei -100 und werden in der Schleife aktualisiert.

Die Bewegungsfunktionen: Zufall und Logik

Herzstück des Programms sind zwei Funktionen, die die neue x-Position berechnen. Jede Funktion nimmt die aktuelle x-Position entgegen und gibt die neue zurück. Im Inneren erzeugst du eine Zufallszahl zwischen 1 und 10 und entscheidest anhand der Wahrscheinlichkeiten, welche Bewegung ausgeführt wird. Achte darauf, dass die Position nie unter -100 oder über 100 fällt – sonst wird sie zurückgesetzt.

Funktion für die Schildkröte:

def move_tortoise(x):
    import random
    num = random.randint(1, 10)
    if 1 <= num <= 5:        # Fast Plod (50%)
        x += 3
    elif 6 <= num <= 7:      # Slip (20%)
        x -= 5
    else:                     # Slow Plod (30%)
        x += 1
    if x < -100:
        x = -100
    if x > 100:
        x = 100
    return x

Funktion für den Hasen:

def move_hare(x):
    import random
    num = random.randint(1, 10)
    if 1 <= num <= 2:        # Sleep (20%)
        pass
    elif 3 <= num <= 4:      # Big Hop (20%)
        x += 7
    elif num == 5:            # Big Slip (10%)
        x -= 10
    elif 6 <= num <= 8:      # Small Hop (30%)
        x += 1
    else:                     # Small Slip (20%)
        x -= 2
    if x < -100:
        x = -100
    if x > 100:
        x = 100
    return x

Beachte: Der Hase kann bei „Schlafen“ seine Position behalten – das kostet wertvolle Zeit! Die Zufallszahlen sind so gewählt, dass die Wahrscheinlichkeiten genau stimmen. Teste die Funktionen ruhig einzeln, bevor du sie in die Schleife einbaust.

Die Rennschleife: while und Taktgeber

Jetzt kommt der spannende Teil: die while-Schleife, die das Rennen steuert. Du brauchst eine Variable tick, die bei jedem Durchlauf um 1 erhöht wird. Die Schleife läuft, solange beide Tiere noch nicht das Ziel erreicht haben (x < 100). In jedem Durchlauf rufst du die Bewegungsfunktionen auf, setzt die neuen Positionen mit setpos() und aktualisierst die Grafiken.

tortoise_x = -100
hare_x = -100
tick = 0

while tortoise_x < 100 and hare_x < 100:
    tick += 1
    tortoise_x = move_tortoise(tortoise_x)
    hare_x = move_hare(hare_x)
    tortoise.setx(tortoise_x)
    hare.setx(hare_x)
    # Kurze Pause, damit die Bewegung sichtbar wird
    turtle.delay(50)

Mit turtle.delay(50) (oder time.sleep(0.05)) verlangsamst du die Animation, damit du das Rennen verfolgen kannst. Vergiss nicht, die turtle.delay-Funktion oder time.sleep zu importieren.

Gewinner ermitteln und Ausgabe

Sobald die Schleife endet, muss der Gewinner feststehen. Laut Aufgabenstellung gewinnt die Schildkröte, wenn ihre x-Position größer oder gleich der des Hasen ist – auch bei Gleichstand. Gib dann eine Nachricht mit der Anzahl der benötigten Ticks aus. Nutze dafür eine unsichtbare Turtle oder die write()-Methode direkt im Fenster.

# Unsichtbare Turtle für Text
messenger = turtle.Turtle()
messenger.hideturtle()
messenger.penup()
messenger.setpos(0, -50)

if tortoise_x >= hare_x:
    message = f"Die Schildkröte gewinnt nach {tick} Sekunden!"
else:
    message = f"Der Hase gewinnt nach {tick} Sekunden!"
messenger.write(message, align="center", font=("Arial", 16, "bold"))

Du kannst auch die Konsole mit print() verwenden, aber die Grafik sieht professioneller aus. Probiere beide Varianten aus.

Grafische Verfeinerungen: Start- und Ziellinie

Damit das Rennen übersichtlicher wird, zeichnest du Start- und Ziellinien. Erstelle dazu zwei weitere Turtle-Objekte, die du nach dem Zeichnen versteckst. Eine Linie bei x = -100 (Start) und eine bei x = 100 (Ziel). Optional kannst du auch eine Beschriftung hinzufügen.

# Startlinie zeichnen
line = turtle.Turtle()
line.hideturtle()
line.penup()
line.setpos(-100, -30)
line.pendown()
line.setpos(-100, 80)
line.write("Start", align="center")

# Ziellinie zeichnen
line.penup()
line.setpos(100, -30)
line.pendown()
line.setpos(100, 80)
line.write("Ziel", align="center")

Mit Farben und Linienstärken kannst du das Ganze noch aufpeppen. Denk daran: Die turtle-Grafik lebt von kreativen Details!

Häufige Fehler und Tipps

Viele Anfänger vergessen, die Zufallszahlen richtig zu mappen. Überprüfe, ob die Bereiche genau den Wahrscheinlichkeiten entsprechen. Teste deine Funktionen mit festen Eingaben, bevor du sie in die Schleife einbaust. Ein weiterer Stolperstein: Die Schleifenbedingung. Sie muss and verwenden, damit das Rennen erst endet, wenn beide Tiere im Ziel sind (oder eines). Wenn du or nimmst, stoppt die Schleife, sobald das erste Tier ankommt – das ist auch korrekt, aber die Aufgabenstellung verlangt, dass beide laufen, bis das Ziel erreicht ist. Lies die Angabe genau! Und vergiss nicht, die y-Koordinate nicht zu verändern – sonst landen die Tiere auf einer falschen Spur.

Erweiterungsmöglichkeiten: Noch mehr Spaß mit turtle

Wenn du fertig bist, kannst du das Projekt erweitern: Füge einen Countdown vor dem Start hinzu, lass die Tiere unterschiedliche Farben annehmen, wenn sie führen, oder zeichne einen Berg im Hintergrund. Du könntest auch die Geschwindigkeit der Animation dynamisch anpassen. Oder baue eine Bestenliste ein, die die wenigsten Ticks speichert. Das trainiert nicht nur deine Python-Kenntnisse, sondern macht auch richtig Eindruck bei deinen Kommilitonen.

Fazit: Von der Fabel zum funktionierenden Programm

Mit diesem Tutorial hast du gelernt, wie du eine klassische Programmieraufgabe mit Python und turtle umsetzt. Du hast Funktionen geschrieben, Zufallsereignisse gesteuert, eine while-Schleife als Taktgeber genutzt und grafische Elemente platziert. Das sind grundlegende Fertigkeiten, die du in vielen anderen Projekten brauchst – egal ob du ein Spiel, eine Simulation oder ein Tool entwickelst. Probier dich aus, experimentiere mit den Wahrscheinlichkeiten und mach das Rennen zu deinem eigenen. Viel Erfolg beim Programmieren!