Programming lesson
Python Bedingte Anweisungen und Variablen: Ein Tutorial am Beispiel eines Pilz-Sammelspiels
Lerne in diesem praxisnahen Tutorial, wie du in Python Variablen, boolesche Logik und Bedingte Anweisungen einsetzt – inspiriert von einem Textadventure-Spiel, in dem du Pilze gegen Rubine tauschst. Perfekt für Programmieranfänger und Csci 141 Studierende.
Einleitung: Warum bedingte Logik in der Spieleentwicklung unverzichtbar ist
Stell dir vor, du entwickelst ein Textadventure – wie die Retro-Spiele aus den 80ern, nur mit modernem Python-Code. In unserem Tutorial schlüpfst du in die Rolle eines Programmierers bei der fiktiven Firma Fungi. Dein Spielcharakter streift durch einen Wald, sammelt Shiitake- und Portobello-Pilze und trifft auf einen Koch, der Rubine dafür bietet. Klingt einfach? Doch der Tausch folgt einer geheimen Formel, die du mit Variablen, boolescher Logik und Bedingten Anweisungen abbilden musst. Genau das ist der Kern von Csci 141 spring 2019 a2 – und ein perfektes Beispiel, um Programmieren zu lernen.
Im Zeitalter von KI-Apps wie ChatGPT oder Spielen wie Stardew Valley sind solche Entscheidungsbäume allgegenwärtig. Egal ob du einen Bot programmierst oder ein Game-Skript schreibst: Bedingte Anweisungen (if, elif, else) sind deine Werkzeuge, um dynamische Abläufe zu steuern. In diesem Tutorial zeige ich dir, wie du sie richtig einsetzt – ohne die komplette Hausaufgabe zu lösen, aber mit genug Tiefe, um dein Verständnis zu festigen.
Grundlagen: Variablen und Datentypen in Python
Bevor wir in die Logik einsteigen, müssen wir Daten speichern. In Python sind Variablen wie beschriftete Kisten: Du legst einen Wert hinein und gibst ihm einen Namen. Für unser Pilzspiel brauchst du Variablen für die Anzahl gefundener Pilze und die Anzahl, die der Spieler handeln möchte. Beispiel:
shiitake_gefunden = 10
portobello_gefunden = 30
shiitake_handel = 5
portobello_handel = 22Hier speicherst du ganze Zahlen (int). Aber was, wenn der Spieler "ja" oder "nein" eingibt? Dann brauchst du Zeichenketten (str). Mit input() holst du Eingaben ab – aber Achtung: input() gibt immer einen String zurück. Für Zahlen musst du mit int() umwandeln.
Trend-Tipp: In vielen modernen Apps wie Duolingo oder Fitness-Trackern werden Eingaben ähnlich validiert. Stell dir vor, du gibst dein Alter ein – die App prüft, ob es eine Zahl ist und ob sie sinnvoll ist. Genau das machst du hier mit Bedingungen.
Boolesche Logik: Wahr oder Falsch?
Bedingte Anweisungen basieren auf booleschen Ausdrücken – sie sind entweder True oder False. Vergleiche wie <, >, == oder != erzeugen solche Werte. Auch logische Operatoren wie and, or und not helfen, komplexe Bedingungen zu bilden. Im Spiel prüfst du zum Beispiel:
- Ob der Spieler mehr Pilze handeln will, als er hat:
shiitake_handel > shiitake_gefunden - Ob die Summe der Pilze Null ist:
shiitake_handel + portobello_handel == 0 - Ob die Anzahl der Shiitake ein Vielfaches von 12, aber nicht von 24 ist:
shiitake_handel % 12 == 0 and shiitake_handel % 24 != 0
Der Modulo-Operator % gibt den Rest einer Division zurück. 12 % 12 == 0 bedeutet: 12 ist ein Vielfaches von 12. 24 % 12 == 0 auch, aber 24 % 24 == 0 – also schließt die zweite Bedingung 24 aus.
Bedingte Anweisungen: if, elif, else
Mit if leitest du einen Entscheidungszweig ein. Die Syntax ist:
if bedingung:
# Code, der ausgeführt wird, wenn bedingung True istFür mehrere Fälle nutzt du elif (else if) und für den Rest else. Wichtig: In Python wird der Codeblock durch Einrückungen (4 Leerzeichen) definiert. Ein klassisches Beispiel aus dem Spiel:
if shiitake_handel + portobello_handel == 0:
print("Der Koch ist nicht interessiert.")
elif shiitake_handel > shiitake_gefunden or portobello_handel > portobello_gefunden:
print("Der Koch läuft weg – du hast nicht genug Pilze!")
else:
# Rubine berechnen
...Beachte die Reihenfolge: Die speziellsten Bedingungen zuerst, dann die allgemeineren. Das verhindert logische Fehler.
Die geheime Formel des Kochs: Bedingungen schachteln
Der Koch hat fünf Regeln, die von den angebotenen Pilzmengen abhängen. Du musst diese in Code übersetzen – und zwar mit maximal 10 if-Schlüsselwörtern. Das zwingt dich, effizient zu denken. Hier ein Auszug der Regeln:
- Weniger als 10 Shiitake und weniger als 5 Portobello: Rubine = 2 * Shiitake
- Weniger als 10 Shiitake und 5 oder mehr Portobello: Rubine = 3 * Portobello
- Shiitake ist ein Vielfaches von 12, aber nicht von 24 und 20 oder mehr Portobello: Rubine = 4 * Portobello
- Shiitake ist ein Vielfaches von 12, aber nicht von 24 und weniger als 20 Portobello: Rubine = Portobello
- Alle anderen Fälle: Rubine = 5 * Shiitake
Ein möglicher Code-Ausschnitt (nicht vollständig, zur Veranschaulichung):
if shiitake_handel < 10:
if portobello_handel < 5:
rubine = 2 * shiitake_handel
else:
rubine = 3 * portobello_handel
elif shiitake_handel % 12 == 0 and shiitake_handel % 24 != 0:
if portobello_handel >= 20:
rubine = 4 * portobello_handel
else:
rubine = portobello_handel
else:
rubine = 5 * shiitake_handelZähle die if-Schlüsselwörter: Das sind 5 Stück (die else zählen nicht). Du hast also noch 5 übrig für andere Prüfungen wie die Eingabevalidierung oder die Abschlussfrage.
Interaktion mit dem Spieler: Eingaben und Ausgaben
Das Spiel lebt von der Interaktion. Du musst den Spieler nach den gefundenen Pilzen fragen, dann nach den Handelspilzen, und schließlich, ob er den Tausch annehmen möchte. Verwende input() und wandle in int um. Beispiel:
shiitake_gefunden = int(input("Wie viele Shiitake-Pilze hast du gefunden? "))
portobello_gefunden = int(input("Wie viele Portobello-Pilze hast du gefunden? "))Nach der Berechnung fragst du: "Möchtest du den Tausch durchführen? (ja/nein) ". Die Antwort speicherst du als String. Mit if antwort in ["ja", "Ja", "yes", "Yes"]: prüfst du auf Zustimmung. Falls ja, gibst du die Rubine und die verbleibenden Pilze aus. Falls nein, nur die Pilze. Denk daran: Die verbleibenden Pilze sind gefunden - gehandelt.
Praxis-Tipp: In echten Spielen wie The Legend of Zelda werden solche Entscheidungen oft mit Ja/Nein-Dialogen umgesetzt. Dein Code bildet genau das ab – und du lernst dabei, Benutzereingaben robust zu verarbeiten.
Fehlerbehandlung: Was passiert bei ungültigen Eingaben?
Die Aufgabenstellung sagt: Wenn der Spieler mehr Pilze handeln will, als er hat, oder wenn die Summe Null ist, soll das Programm einfach enden – ohne Fehlermeldung. Das erreichst du mit exit() oder indem du den restlichen Code in einen else-Block packst. Achte darauf, dass exit() das Programm sofort beendet. Beispiel:
if shiitake_handel > shiitake_gefunden or portobello_handel > portobello_gefunden:
print("Der Koch läuft weg!")
exit()Wenn der Spieler 0 Pilze anbietet, endet das Gespräch ebenfalls. Das ist eine einfache Form der Validierung – in komplexeren Systemen würdest du Schleifen einbauen, um den Spieler zur erneuten Eingabe aufzufordern.
Best Practices: Sauberer Code und Kommentare
In der Aufgabenbewertung fließen Punkte für Kommentare und sinnvolle Variablennamen ein. Schreibe also:
# Anzahl der gefundenen Pilze
shiitake_gefunden = 10
portobello_gefunden = 30
# Anzahl der zum Handel angebotenen Pilze
shiitake_handel = 5
portobello_handel = 22Vermeide Namen wie a, b oder x. Nutze beschreibende Namen – das hilft dir und anderen, den Code zu verstehen. Kommentare sollten erklären, warum etwas passiert, nicht was passiert (das sieht man ja im Code).
Zusammenfassung und nächste Schritte
Mit diesem Tutorial hast du gelernt, wie du mit Python-Variablen, boolescher Logik und bedingten Anweisungen ein interaktives Spiel-Szenario umsetzt. Du kennst jetzt die Grundlagen, um die Hausaufgabe Csci 141 spring 2019 a2 zu lösen – aber ohne die Lösung einfach zu kopieren. Experimentiere mit eigenen Werten, teste alle Pfade der Tabelle und versuche, die Anzahl der if-Schlüsselwörter zu minimieren.
Als Bonus: Die Challenge-Aufgabe verlangt, den Median und Mittelwert von drei Zahlen zu berechnen – ohne Bibliotheken. Das ist eine gute Übung, um Bedingungen und Arithmetik zu kombinieren. Viel Erfolg!