Forscherheft · Folge 12

Das Ratespiel wächst – v4

Dein Ratespiel kennt schon drei Versionen. Jetzt kommt v4 – und zum ersten Mal bringst du Listen aus Folge 9 richtig zum Einsatz: Das Spiel merkt sich deine Tipps, kann mehrere Runden spielen und zeigt danach eine Übersicht.

🧭 So funktioniert diese Folge

Kein neuer Stoff – du wendest an, was du aus Folge 9 kennst. Öffne ratespiel_v3.py in Thonny, damit du die Unterschiede direkt siehst.

💡 Warum diese Änderung
🧪 Mach es an deinem Pi
🕹️ Live ausprobieren
1

Was kommt neu in v4?

Du lernst: Was wir an v3 verbessern – und warum.

In ratespiel_v3.py konnte man nach einer Runde nichts mehr nachschauen: Welche Zahlen habe ich getippt? Wie war mein Ergebnis in der letzten Runde? Das ändern wir in v4 mit zwei Ergänzungen:

1
Tipp-Liste: rate_eine_runde() merkt sich alle Tipps einer Runde in einer Liste. Am Ende gibt sie die Liste aus.
2
Mehrere Runden: Das Hauptprogramm fragt nach jeder Runde „Nochmal?", speichert alle Rundenresultate in einer Liste und zeigt am Ende eine Übersicht.
🧪 Kopiere zuerst ratespiel_v3.py

Wechsle im Terminal in ~/Forscherheft/ratespiel und kopiere:

Terminal
cp ratespiel_v3.py ratespiel_v4.py

Öffne ratespiel_v4.py in Thonny. Jetzt änderst du es Station für Station.

💡 Vier Versionen, ein Programm

v1 (Folge 5): Grundspiel · v2 (Folge 7): Highscore · v3 (Folge 10): Funktionen · v4 (diese Folge): Listen. Jede Version baut auf der vorherigen auf – so sieht echte Softwareentwicklung aus.

Station 1 geschafft!
2

Die Tipp-Liste

Du lernst: append() und for in einer echten Funktion einsetzen.

Die Funktion rate_eine_runde() bekommt drei neue Zeilen. Alles andere bleibt wie in v3. Hier ist die geänderte Funktion – die neuen Zeilen sind mit # NEU markiert:

rate_eine_runde() — geänderte Version
def rate_eine_runde(): geheimzahl = random.randint(1, 20) versuche = 0 tipps = [] # NEU print("Ich denke an eine Zahl zwischen 1 und 20!") while True: tipp = int(input("Dein Tipp: ")) versuche += 1 tipps.append(tipp) # NEU if tipp == geheimzahl: print("Richtig! 🎉 " + str(versuche) + " Versuche.") print("Deine Tipps:") for t in tipps: # NEU print(" " + str(t)) return versuche elif tipp < geheimzahl: print("Höher!") else: print("Niedriger!")
1
tipps = [] — leere Liste, bevor die Schleife startet. Jede Runde beginnt mit einer leeren Liste.
2
tipps.append(tipp) — jeder Tipp landet sofort in der Liste, bevor wir prüfen ob er stimmt.
3
for t in tipps: — wenn die Zahl erraten ist, gehen wir die fertige Liste durch und geben jeden Tipp aus.

🧠 Schnell-Check: Warum steht tipps = [] vor der while-Schleife und nicht drin?

🧪 Mach es an deinem Pi

Füge die drei markierten Zeilen in ratespiel_v4.py ein und starte es. Spiele eine Runde – siehst du am Ende deine Tipps?

Station 2 geschafft!
3

Mehrere Runden & Rundenübersicht

Du lernst: Das Hauptprogramm mit einer zweiten Liste und Mehrfach-Runden ausbauen.

Jetzt kommt der zweite Teil: Das Hauptprogramm fragt nach jeder Runde ob man nochmal spielen möchte, speichert die Ergebnisse in ergebnisse und zeigt am Ende eine Übersicht. Hier ist das vollständige ratespiel_v4.py:

ratespiel_v4.py (vollständig)
import random def lade_highscore(): try: with open("highscore.txt", "r") as f: return int(f.read()) except: return 999 def speichere_highscore(score): with open("highscore.txt", "w") as f: f.write(str(score)) def rate_eine_runde(): geheimzahl = random.randint(1, 20) versuche = 0 tipps = [] print("Ich denke an eine Zahl zwischen 1 und 20!") while True: tipp = int(input("Dein Tipp: ")) versuche += 1 tipps.append(tipp) if tipp == geheimzahl: print("Richtig! 🎉 " + str(versuche) + " Versuche.") print("Deine Tipps:") for t in tipps: print(" " + str(t)) return versuche elif tipp < geheimzahl: print("Höher!") else: print("Niedriger!") highscore = lade_highscore() print("Aktueller Highscore: " + str(highscore) + " Versuche") ergebnisse = [] weiterspielen = True while weiterspielen: ergebnis = rate_eine_runde() ergebnisse.append(ergebnis) if ergebnis < highscore: highscore = ergebnis speichere_highscore(highscore) print("Neuer Highscore! 🏆") else: print("Highscore bleibt: " + str(highscore) + " Versuche") antwort = input("Nochmal? (ja/nein): ") if antwort != "ja": weiterspielen = False print("--- Deine Rundenübersicht ---") for i in range(len(ergebnisse)): print("Runde " + str(i + 1) + ": " + str(ergebnisse[i]) + " Versuche")
for i in range(len(ergebnisse)): — was passiert hier?
len(ergebnisse) gibt die Anzahl der Runden zurück. range(3) liefert 0, 1, 2. Mit ergebnisse[i] greifst du per Index auf jedes Ergebnis zu. i + 1 macht aus 0 eine 1, damit es „Runde 1" heißt und nicht „Runde 0".
🕹️ ratespiel_v4 live ausprobieren

Tippe Zahlen, gewinne, beantworte dann „Nochmal?" – und sieh die Rundenübersicht am Ende!

🎯 Mission: Zwei Runden spielen

  • Erste Runde gewinnen
  • „ja" eingeben und zweite Runde gewinnen
  • „nein" eingeben und Rundenübersicht sehen
Terminal — ratespiel_v4.py
Tipp:
Station 3 geschafft!
📚

Glossar – Konzepte aus Folge 12

Kein neuer Stoff – aber zwei Muster, die du jetzt kennst.

range(len(liste))
Liefert Indizes von 0 bis zur Länge der Liste − 1. Damit kannst du auf jedes Element per Index zugreifen und gleichzeitig die Positionsnummer kennen. Kombination aus range() (Folge 3) und len() (Folge 9).
liste[i] und i + 1
Mit liste[i] greifst du per Index zu. i + 1 macht die 0-basierte Zählung für die Ausgabe menschenlesbar: Index 0 → „Runde 1".
Zustandsvariable (weiterspielen)
Eine Boolean-Variable, die kontrolliert ob eine Schleife weiterläuft. Statt while True mit break setzt man sie auf False, wenn die Bedingung zum Beenden erfüllt ist.
🎒

Das hast du in Folge 12 gelernt

Rückblick auf ratespiel_v4 – und auf alle vier Versionen.

In dieser Folge hast du kein neues Konzept gelernt – du hast angewendet. Das ist der wichtigste Schritt beim Programmieren lernen: bekannte Werkzeuge in einem echten Programm einsetzen.

  • tipps = [] + append() in einer Funktion – Liste füllen während der Schleife läuft.
  • for t in tipps: – am Ende der Runde alle Tipps ausgeben.
  • ergebnisse = [] + Mehrfach-Runden – Ergebnisse über mehrere Durchläufe sammeln.
  • for i in range(len(ergebnisse)): – Rundenübersicht mit Positionsnummer ausgeben.
💡 Die vier Versionen auf einen Blick

v1 (Folge 5): while + input + random
v2 (Folge 7): + Highscore mit try/except und Datei
v3 (Folge 10): refaktoriert mit def-Funktionen und +=
v4 (diese Folge): + Tipp-Liste + mehrere Runden + Rundenübersicht

Rückblick gelesen!

Bonus-Quiz

Freiwillig! Teste, ob du die Änderungen in v4 verstanden hast.

⭐ Optional

Diese Fragen sind freiwillig – du kannst auch direkt weitergehen. Kein Druck!

🧠 Nach Runde 1 enthält ergebnisse den Wert [5]. Nach Runde 2 (3 Versuche) – was steht dann drin?

🧠 ergebnisse = [4, 2, 7]. Was gibt ergebnisse[1] zurück?

🧠 Was ist der Unterschied zwischen for t in tipps: und for i in range(len(ergebnisse)):?

🚀

Was kommt als Nächstes?

Ein Blick auf Folge 13.

Du hast jetzt zwölf Folgen Python und Theorie hinter dir. In Folge 13 machst du eine Pause vom Programmieren und lernst die Profi-Abkürzungen am Computer kennen.

Teil A zeigt Terminal-Tricks, die dir täglich Zeit sparen: Tab-Vervollständigung, Pfeiltasten für den Befehlsverlauf, und neue Befehle wie mv und ls -l. Teil B zeigt die wichtigsten Tastenkombinationen – und einen gefährlichen Unterschied, den fast alle Anfänger erst falsch machen.

Start