171 lines
7.2 KiB
Python
171 lines
7.2 KiB
Python
"""
|
|
Kapitel G04: Verzweigungen & Bedingungen (Schulabgleich 08.0)
|
|
============================================================
|
|
|
|
In diesem Kapitel lernst du:
|
|
1. Wie du Entscheidungen mit if, elif und else programmierst.
|
|
2. Vergleichsoperatoren: ==, !=, <, >, <=, >=.
|
|
3. Logische Operatoren: and, or, not.
|
|
4. Flache elif-Ketten vs. tief verschachtelte Bedingungen.
|
|
5. Wie du komplexe Geschäftslogik und Grenzwerte sauber implementierst.
|
|
|
|
Bearbeite die Aufgaben TODO 1 bis TODO 4.
|
|
Führe danach die Tests aus mit:
|
|
python3 test_aufgabe.py
|
|
"""
|
|
|
|
# ==============================================================================
|
|
# 🎯 TEILZIEL 1 (TODO 1): Kinokarten-Preisrechner
|
|
#
|
|
# Schreibe eine Funktion 'ticket_preis(alter: int, ist_student: bool) -> float'.
|
|
# Sie berechnet den Ticketpreis nach folgenden Tarif-Regeln:
|
|
# - Kinder unter 12 Jahren (alter < 12): 6.00 € (Kindertarif)
|
|
# - Senioren ab 65 Jahren (alter >= 65): 8.50 € (Seniorentarif)
|
|
# - Alle anderen Personen (12 bis 64 Jahre):
|
|
# - Wenn ist_student True ist: 9.50 € (Studenten-/Ermäßigungstarif)
|
|
# - Wenn ist_student False ist: 12.00 € (Regulärer Erwachsenentarif)
|
|
#
|
|
# Beispiele:
|
|
# ticket_preis(8, False) -> 6.0
|
|
# ticket_preis(70, False) -> 8.5
|
|
# ticket_preis(22, True) -> 9.5
|
|
# ticket_preis(30, False) -> 12.0
|
|
# ==============================================================================
|
|
|
|
def ticket_preis(alter: int, ist_student: bool) -> float:
|
|
# 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt:
|
|
# 💡 Tipp: Beachte Datentypen und das abschließende return!
|
|
pass
|
|
|
|
|
|
# ==============================================================================
|
|
# 🎯 TEILZIEL 2 (TODO 2): Schulnoten-Ermittlung
|
|
#
|
|
# Schreibe eine Funktion 'schulnote_text(punkte: int) -> str'.
|
|
# Sie ordnet einer erreichten Punktezahl (0 bis 100) die passende Textnote zu:
|
|
# - 90 bis 100 Punkte (punkte >= 90): "Sehr gut"
|
|
# - 75 bis 89 Punkte (punkte >= 75): "Gut"
|
|
# - 60 bis 74 Punkte (punkte >= 60): "Befriedigend"
|
|
# - 50 bis 59 Punkte (punkte >= 50): "Genügend"
|
|
# - 0 bis 49 Punkte (punkte < 50): "Nicht genügend"
|
|
# - Werte unter 0 oder über 100: "Ungültige Punktezahl"
|
|
#
|
|
# Beispiele:
|
|
# schulnote_text(95) -> "Sehr gut"
|
|
# schulnote_text(75) -> "Gut"
|
|
# schulnote_text(49) -> "Nicht genügend"
|
|
# schulnote_text(110) -> "Ungültige Punktezahl"
|
|
# schulnote_text(-5) -> "Ungültige Punktezahl"
|
|
# ==============================================================================
|
|
|
|
def schulnote_text(punkte: int) -> str:
|
|
# 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt:
|
|
# 💡 Tipp: Beachte Datentypen und das abschließende return!
|
|
pass
|
|
|
|
|
|
# ==============================================================================
|
|
# 🎯 TEILZIEL 3 (TODO 3): Schaltjahr-Erkennung
|
|
#
|
|
# Schreibe eine Funktion 'ist_schaltjahr(jahr: int) -> bool'.
|
|
# Die Funktion soll prüfen, ob ein übergebenes Kalenderjahr ein Schaltjahr ist.
|
|
#
|
|
# Die Gregorianische Schaltjahr-Regel lautet:
|
|
# 1. Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist (jahr % 4 == 0).
|
|
# 2. AUSNAHME: Ist es durch 100 teilbar (jahr % 100 == 0), ist es KEIN Schaltjahr...
|
|
# 3. AUSNAHME DER AUSNAHME: ...es sei denn, es ist auch durch 400 teilbar (jahr % 400 == 0)!
|
|
#
|
|
# Beispiele:
|
|
# ist_schaltjahr(2024) -> True (durch 4 teilbar, nicht durch 100)
|
|
# ist_schaltjahr(2023) -> False (nicht durch 4 teilbar)
|
|
# ist_schaltjahr(1900) -> False (durch 100 teilbar, aber nicht durch 400)
|
|
# ist_schaltjahr(2000) -> True (durch 400 teilbar)
|
|
# ==============================================================================
|
|
|
|
def ist_schaltjahr(jahr: int) -> bool:
|
|
# 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt:
|
|
# 💡 Tipp: Beachte Datentypen und das abschließende return!
|
|
pass
|
|
|
|
|
|
# ==============================================================================
|
|
# 🎯 TEILZIEL 4 (TODO 4): Achterbahn-Zulassung
|
|
#
|
|
# Schreibe eine Funktion 'kann_achterbahn_fahren(groesse_cm: int, begleitung_erwachsen: bool) -> bool'.
|
|
# Ein Freizeitpark hat folgende Sicherheitsbestimmungen:
|
|
# - Ab 140 cm Körpergröße darf jede Person alleine mitfahren (True).
|
|
# - Zwischen 120 cm und 139 cm darf eine Person NUR mitfahren, wenn
|
|
# eine erwachsene Begleitperson dabei ist (begleitung_erwachsen == True).
|
|
# - Unter 120 cm Körpergröße darf niemand mitfahren (immer False).
|
|
#
|
|
# Beispiele:
|
|
# kann_achterbahn_fahren(145, False) -> True (Groß genug für Alleinfahrt)
|
|
# kann_achterbahn_fahren(130, True) -> True (Mit Begleitung erlaubt)
|
|
# kann_achterbahn_fahren(130, False) -> False (Ohne Begleitung verboten)
|
|
# kann_achterbahn_fahren(115, True) -> False (Zu klein, auch mit Begleitung)
|
|
# ==============================================================================
|
|
|
|
def kann_achterbahn_fahren(groesse_cm: int, begleitung_erwachsen: bool) -> bool:
|
|
# 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt:
|
|
# 💡 Tipp: Beachte Datentypen und das abschließende return!
|
|
pass
|
|
|
|
|
|
# ==============================================================================
|
|
# Interaktives Hauptprogramm zum Ausprobieren:
|
|
# (Führe dieses Skript aus mit: python3 aufgabe.py)
|
|
# ==============================================================================
|
|
if __name__ == "__main__":
|
|
print("=" * 60)
|
|
print("🎢 BEDINGUNGEN & VERZWEIGUNGEN DEMO")
|
|
print("=" * 60)
|
|
|
|
# 1. Kino-Test
|
|
print("\n🎟️ --- Kino-Preisrechner ---")
|
|
try:
|
|
alter_eingabe = int(input("Alter des Besuchers: "))
|
|
student_eingabe = input("Student/Schüler? (j/n): ").strip().lower() == "j"
|
|
preis = ticket_preis(alter_eingabe, student_eingabe)
|
|
if preis is not None:
|
|
print(f"Ticketpreis: {preis:.2f} €")
|
|
else:
|
|
print("Implementiere TODO 1 für die Preisberechnung!")
|
|
except ValueError:
|
|
print("Ungültige Alterseingabe!")
|
|
|
|
# 2. Noten-Test
|
|
print("\n📝 --- Notenspiegel-Rechner ---")
|
|
try:
|
|
punkte_eingabe = int(input("Erreichte Punkte (0-100): "))
|
|
note = schulnote_text(punkte_eingabe)
|
|
if note is not None:
|
|
print(f"Ergebnis: {note}")
|
|
else:
|
|
print("Implementiere TODO 2 für die Notenberechnung!")
|
|
except ValueError:
|
|
print("Ungültige Punktezahl!")
|
|
|
|
# 3. Schaltjahr-Test
|
|
print("\n📅 --- Schaltjahr-Prüfer ---")
|
|
try:
|
|
jahr_eingabe = int(input("Jahr eingeben (z.B. 2024): "))
|
|
schalt = ist_schaltjahr(jahr_eingabe)
|
|
if schalt is not None:
|
|
print(f"Ist {jahr_eingabe} ein Schaltjahr? -> {'Ja! 🎉' if schalt else 'Nein.'}")
|
|
else:
|
|
print("Implementiere TODO 3 für die Schaltjahrprüfung!")
|
|
except ValueError:
|
|
print("Ungültiges Jahr!")
|
|
|
|
# 4. Achterbahn-Test
|
|
print("\n🎢 --- Achterbahn-Einlasskontrolle ---")
|
|
try:
|
|
groesse = int(input("Körpergröße in cm (z.B. 135): "))
|
|
begl = input("Erwachsene Begleitung dabei? (j/n): ").strip().lower() == "j"
|
|
darf_fahren = kann_achterbahn_fahren(groesse, begl)
|
|
if darf_fahren is not None:
|
|
print(f"Darf Achterbahn fahren? -> {'Ja, viel Spaß! 🎢' if darf_fahren else 'Leider nein 🛑'}")
|
|
else:
|
|
print("Implementiere TODO 4 für die Achterbahn-Zulassung!")
|
|
except ValueError:
|
|
print("Ungültige Größenangabe!")
|