Aufgaben-Python/lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py

155 lines
6.5 KiB
Python

"""
Kapitel G03: Interaktive Ein- & Ausgabe (Schulabgleich 07.0)
============================================================
In diesem Kapitel lernst du:
1. Wie du Benutzereingaben über die Tastatur mit input() entgegennimmst.
2. Wie du Datentypen umwandelst (int(input(...)), float(input(...))).
3. Wie du moderne f-Strings für formatierte Textausgaben einsetzt.
4. Wie du Zahlenwerte formatiert darstellst ({preis:.2f} €, {prozent:.1%}, {zahl:04d}).
5. Wie du print() mit den Parametern sep= und end= steuerst.
Bearbeite die Aufgaben TODO 1 bis TODO 4.
Führe danach die Tests aus mit:
python3 test_aufgabe.py
"""
# ==============================================================================
# 🎯 TEILZIEL 1 (TODO 1): Begrüßungstext mit f-String
#
# Schreibe eine Funktion 'begruessungs_text(name: str, stadt: str) -> str'.
# Sie soll folgenden Text zurückgeben:
# "Hallo {name}, herzlich willkommen in {stadt}!"
#
# Beispiel:
# begruessungs_text("Anna", "Wien") -> "Hallo Anna, herzlich willkommen in Wien!"
# ==============================================================================
def begruessungs_text(name: str, stadt: str) -> str:
# 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt:
# 💡 Tipp: Beachte Datentypen und das abschließende return!
pass
# ==============================================================================
# 🎯 TEILZIEL 2 (TODO 2): Alter in Tagen berechnen
#
# Schreibe eine Funktion 'berechne_alter_in_tagen(jahre: int) -> int'.
# Sie erhält das Alter in ganzen Jahren (z.B. 18) und soll das Alter in Tagen
# berechnen (wir rechnen vereinfacht mit genau 365 Tagen pro Jahr).
#
# Beispiel:
# berechne_alter_in_tagen(18) -> 6570
# berechne_alter_in_tagen(1) -> 365
# ==============================================================================
def berechne_alter_in_tagen(jahre: int) -> int:
# 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt:
# 💡 Tipp: Beachte Datentypen und das abschließende return!
pass
# ==============================================================================
# 🎯 TEILZIEL 3 (TODO 3): Rechnungsposten formatieren
#
# Schreibe eine Funktion 'formatiere_rechnungsposten(artikel: str, anzahl: int, einzelpreis: float) -> str'.
# Sie berechnet den Gesamtpreis (anzahl * einzelpreis) und gibt einen formatierten
# Rechnungs-String zurück.
#
# Format:
# "{anzahl}x {artikel} à {einzelpreis:.2f} € = {gesamtpreis:.2f} €"
#
# WICHTIG: Die Preise müssen immer auf genau 2 Nachkommastellen formatiert sein!
#
# Beispiele:
# formatiere_rechnungsposten("Kaffee", 3, 2.5) -> "3x Kaffee à 2.50 € = 7.50 €"
# formatiere_rechnungsposten("Buch", 1, 19.99) -> "1x Buch à 19.99 € = 19.99 €"
# formatiere_rechnungsposten("Semmel", 5, 0.40) -> "5x Semmel à 0.40 € = 2.00 €"
# ==============================================================================
def formatiere_rechnungsposten(artikel: str, anzahl: int, einzelpreis: float) -> str:
# 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt:
# 💡 Tipp: Beachte Datentypen und das abschließende return!
pass
# ==============================================================================
# 🎯 TEILZIEL 4 (TODO 4): Steckbrief mit BMI-Berechnung
#
# Schreibe eine Funktion 'steckbrief(name: str, groesse_m: float, gewicht_kg: float) -> str'.
# 1. Berechne den BMI (Body-Mass-Index) nach der Formel:
# bmi = gewicht_kg / (groesse_m ** 2)
# 2. Gib folgenden formatierten Steckbrief-String zurück:
# "Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg:.1f} kg | BMI: {bmi:.1f}"
#
# WICHTIG:
# - Größe auf 2 Nachkommastellen formatiert ({groesse_m:.2f} m)
# - Gewicht auf 1 Nachkommastelle formatiert ({gewicht_kg:.1f} kg)
# - BMI auf 1 Nachkommastelle formatiert ({bmi:.1f})
#
# Beispiel:
# steckbrief("Alex", 1.80, 75.0) -> "Steckbrief: Alex | Größe: 1.80 m | Gewicht: 75.0 kg | BMI: 23.1"
# steckbrief("Mia", 1.65, 58.5) -> "Steckbrief: Mia | Größe: 1.65 m | Gewicht: 58.5 kg | BMI: 21.5"
# ==============================================================================
def steckbrief(name: str, groesse_m: float, gewicht_kg: float) -> str:
# 🎯 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("💬 INTERAKTIVE EIN- & AUSGABE DEMO")
print("=" * 60)
# 1. Demonstration von print() mit sep und end
print("Python", "ist", "klasse!", sep=" - ")
print("Lade Daten", end="... ")
print("Fertig!\n")
# 2. Interaktiver Dialog mit Tastatureingabe
try:
benutzer_name = input("Wie heißt du? ")
benutzer_stadt = input("Aus welcher Stadt kommst du? ")
begruessung = begruessungs_text(benutzer_name, benutzer_stadt)
if begruessung:
print(begruessung)
else:
print(f"Hallo {benutzer_name} aus {benutzer_stadt} (Implementiere TODO 1)!")
alter_str = input("\nWie alt bist du (in Jahren)? ")
# Achtung: input() liefert immer einen String -> Umwandlung mit int() nötig!
alter_int = int(alter_str)
tage = berechne_alter_in_tagen(alter_int)
if tage is not None:
print(f"Wahnsinn, du lebst schon seit ca. {tage} Tagen!")
else:
print("Implementiere TODO 2 für die Tage-Berechnung!")
print("\n--- Kassenbon-Generator ---")
art = input("Welcher Artikel? ")
anz = int(input("Wie viele Stück? "))
preis = float(input("Einzelpreis in € (z.B. 2.99): "))
posten = formatiere_rechnungsposten(art, anz, preis)
if posten:
print(posten)
else:
print("Implementiere TODO 3 für den formatierten Rechnungsposten!")
print("\n--- Steckbrief & BMI-Rechner ---")
gr = float(input("Deine Körpergröße in Metern (z.B. 1.75): "))
gw = float(input("Dein Körpergewicht in kg (z.B. 68.0): "))
sb = steckbrief(benutzer_name, gr, gw)
if sb:
print(sb)
else:
print("Implementiere TODO 4 für den Steckbrief!")
except (ValueError, TypeError) as fehler:
print(f"\n💡 Hinweis / Fehleingabe: {fehler}")
print("Achte darauf, bei Zahlen nur Ziffern und bei Kommazahlen einen Punkt '.' einzugeben!")