Programming lesson
Python-String-Manipulation für eine Lotterie-Simulation – Tutorial zu Lab 7 (CSCI 141)
Lerne in diesem Tutorial, wie du mit Python-Strings arbeitest, indem du eine Lotterie-Simulation mit Wörtern und Ziffern erstellst. Perfekt für Studierende der Informatik, die Lab 7 (CSCI 141) bearbeiten.
Einführung: Warum String-Manipulation wichtig ist
In der heutigen digitalen Welt begegnen uns Strings überall: in Benutzereingaben, in Datenbankabfragen, in der Kommunikation zwischen Apps. Stell dir vor, du arbeitest bei einem Startup wie Lotter.io, das eine innovative Lotterie entwickelt – nicht mit Zahlen, sondern mit Wörtern und Ziffern. Genau darum geht es in diesem Lab: Du lernst, wie du mit Python Zeichenketten durchsuchen, vergleichen und verändern kannst. Diese Fähigkeiten sind grundlegend für viele Bereiche der Softwareentwicklung, von der Eingabevalidierung bis zur Datenanalyse.
Grundlagen der String-Manipulation in Python
Bevor wir in die Lotterie-Simulation eintauchen, wiederholen wir die wichtigsten String-Operationen. Du kennst bereits die Indexierung: s[0] gibt das erste Zeichen zurück. Slicing mit s[start:end] extrahiert Teilstrings. Methoden wie upper(), lower(), find() und replace() helfen dir, Strings zu analysieren und zu verändern. Besonders nützlich sind die Operatoren in und not in, mit denen du prüfen kannst, ob ein Teilstring in einem String enthalten ist.
Die Lotterie-Simulation: Aufgabenübersicht
Dein Programm soll einen zufälligen Gewinner-Pick generieren, eine gültige Benutzereingabe einlesen und dann prüfen, ob der Benutzer gewonnen hat. Ein Pick besteht aus einem der Wörter „monkey“, „dragon“ oder „snake“ und einer der Ziffern 1, 2 oder 3 – entweder Wort zuerst oder Ziffer zuerst. Zum Beispiel sind „monkey1“ und „2dragon“ gültige Picks.
Aufgabe 1: Zufälligen Gewinner-Pick generieren
Die Funktion generate_winner() soll einen zufälligen Pick zurückgeben. Der Code für den Easter Egg (Cheat-Modus) ist bereits vorgegeben – wenn der Benutzer beim Start einen gültigen Pick eingibt, wird dieser als Gewinner verwendet. Deine Aufgabe ist es, den Rest der Funktion zu implementieren: Wähle zufällig eines der drei Wörter, zufällig eine der drei Ziffern und zufällig die Reihenfolge (Wort zuerst oder Ziffer zuerst). Verwende random.choice() aus dem Modul random.
import random
words = ['monkey', 'dragon', 'snake']
digits = ['1', '2', '3']
word = random.choice(words)
digit = random.choice(digits)
if random.choice([True, False]):
pick = word + digit
else:
pick = digit + word
return pickAufgabe 2: Gültige Benutzereingabe einlesen
Implementiere die Funktion get_valid_guess(), die den Benutzer so lange zur Eingabe auffordert, bis der eingegebene String eines der drei Wörter enthält und mit einer der drei Ziffern beginnt oder endet. Beachte: Der String darf auch andere Zeichen enthalten (z.B. „dragoncat3“ ist gültig, weil er „dragon“ enthält und mit „3“ endet). Nutze in und die String-Methoden startswith() oder endswith().
def get_valid_guess():
words = ['monkey', 'dragon', 'snake']
digits = ['1', '2', '3']
while True:
guess = input('Dein Tipp: ')
# Prüfe, ob eines der Wörter enthalten ist
word_found = any(w in guess for w in words)
# Prüfe, ob guess mit einer Ziffer beginnt oder endet
starts_or_ends_with_digit = guess[0] in digits or guess[-1] in digits
if word_found and starts_or_ends_with_digit:
return guess
print('Ungültige Eingabe. Versuche es erneut.')Aufgabe 3: Benutzerpick mit Gewinnerpick vergleichen
Im Hauptprogramm rufst du die beiden Funktionen auf und vergleichst die Picks. Du musst fünf verschiedene Fälle unterscheiden:
- Exakte Übereinstimmung: Gewonnen!
- Wort und Ziffer richtig, aber Reihenfolge falsch: „Du hast das richtige Wort und die richtige Zahl, aber in der falschen Reihenfolge!“
- Nur Ziffer richtig: „Du hast die richtige Zahl, aber nicht das richtige Wort.“
- Nur Wort richtig: „Du hast das richtige Wort, aber nicht die richtige Zahl.“
- Weder Wort noch Ziffer richtig: „Du hast weder das richtige Wort noch die richtige Zahl.“
Um die Reihenfolge zu prüfen, extrahierst du aus dem Benutzerpick das Wort und die Ziffer. Da der Pick nicht unbedingt nur aus Wort+Ziffer besteht, musst du clever vorgehen: Du kannst für jedes der drei Wörter prüfen, ob es im Pick vorkommt, und dann die Ziffernpositionen suchen. Eine einfachere Methode: Da du weißt, dass der Pick genau ein Wort und eine Ziffer enthält (auch wenn andere Zeichen da sein können), kannst du mit find() die Position des Wortes und der Ziffer bestimmen. Aber Achtung: Die Ziffer könnte mehrfach vorkommen. Für dieses Lab reicht es, wenn du prüfst, ob das Wort und die Ziffer im Pick sind, und dann die Reihenfolge anhand der ersten Vorkommen bestimmst.
# Pseudocode
winning_pick = generate_winner()
user_pick = get_valid_guess()
# Wort und Ziffer aus winning_pick extrahieren (einfach, da nur Wort+Ziffer)
win_word = winning_pick[:-1] if winning_pick[-1].isdigit() else winning_pick[1:]
win_digit = winning_pick[-1] if winning_pick[-1].isdigit() else winning_pick[0]
# Aus user_pick das Wort und die Ziffer finden
user_word = None
for w in words:
if w in user_pick:
user_word = w
break
user_digit = None
for ch in user_pick:
if ch in digits:
user_digit = ch
break
# Vergleichen
if user_pick == winning_pick:
print('Gewonnen! Du erhältst 1.000.000 €!')
elif user_word == win_word and user_digit == win_digit:
print('Du hast das richtige Wort und die richtige Zahl, aber in der falschen Reihenfolge!')
elif user_digit == win_digit:
print('Du hast die richtige Zahl, aber nicht das richtige Wort.')
elif user_word == win_word:
print('Du hast das richtige Wort, aber nicht die richtige Zahl.')
else:
print('Du hast weder das richtige Wort noch die richtige Zahl.')Praktische Tipps und häufige Fehler
Fehler 1: Die Funktion get_valid_guess akzeptiert Eingaben, die nicht den Kriterien entsprechen. Teste mit Eingaben wie „abc“ (sollte abgelehnt werden) oder „monkey“ (keine Ziffer, sollte abgelehnt werden).
Fehler 2: Beim Vergleichen die Reihenfolge nicht korrekt prüfen. Denk daran, dass der Benutzerpick zusätzliche Zeichen enthalten kann. Verwende in und find().
Fehler 3: Den Easter Egg-Code versehentlich ändern. Der vorgegebene Code für den Cheat-Modus darf nicht modifiziert werden, sonst gibt es Punktabzug.
Erweiterungsideen für dein Projekt
Wenn du Lust hast, kannst du das Programm erweitern: Füge einen Highscore hinzu, der die Anzahl der Versuche speichert. Oder implementiere einen Mehrspielermodus. Du könntest auch weitere Wörter und Ziffern hinzufügen, um die Lotterie komplexer zu machen. Diese Erweiterungen sind nicht Teil des Labs, aber sie helfen dir, deine Python-Kenntnisse zu vertiefen.
Fazit
Mit diesem Lab hast du gelernt, wie man Strings in Python manipuliert, Benutzereingaben validiert und komplexe Vergleiche durchführt. Diese Fähigkeiten sind nicht nur für Hausaufgaben wichtig, sondern auch für reale Anwendungen – von der Validierung von Passwörtern bis zur Verarbeitung von Textdaten in KI-Projekten. Viel Erfolg bei der Abgabe!