Aufgaben-Python/g03_ein_und_ausgabe/README.md

122 lines
4.4 KiB
Markdown

# Kapitel G03: Interaktive Ein- & Ausgabe (Schulabgleich 07.0) 💬⌨️
Herzlich willkommen zum Kapitel **Interaktive Ein- und Ausgabe**!
Programme werden erst dann richtig spannend, wenn sie mit Menschen interagieren können: Sie stellen Fragen, nehmen Antworten über die Tastatur entgegen, verarbeiten diese und geben schön formatierte Ergebnisse auf dem Bildschirm aus.
---
## 🎯 Lernziele
1. **Benutzereingaben erfassen:** `input("Fragetext: ")` nutzen.
2. **Die goldene `input()`-Regel verstehen:** `input()` liefert **immer** einen `str` (Text), selbst wenn die Benutzerin `42` eingibt.
3. **Datentypen umwandeln (Typkonvertierung / Casting):** Mit `int()` und `float()` Texte in Zahlen umwandeln.
4. **Moderne f-Strings einsetzen:** Variablen und Ausdrücke sauber in Texte einbetten: `f"Hallo {name}!"`.
5. **Format-Spezifizierer beherrschen:** Zahlen präzise runden und formatieren (`{preis:.2f} €`, `{bmi:.1f}`, `{zahl:04d}`).
6. **`print()` Parameter steuern:** `sep="-"` (Trennzeichen) und `end=""` (Zeilenende) anwenden.
---
## 💡 Theorie & Wichtige Konzepte
### 1. Tastatureingabe mit `input()`
Die Funktion `input()` pausiert dein Programm und wartet darauf, dass die Benutzerin etwas im Terminal eintippt und mit <kbd>Enter</kbd> bestätigt.
```python
name = input("Wie heißt du? ")
print(f"Schön, dich kennenzulernen, {name}!")
```
> ⚠️ **Achtung, Falle!** `input()` liefert IMMER einen `str`:
> ```python
> alter_text = input("Dein Alter: ") # Wenn du 15 eingibst, ist der Wert "15" (Text)!
> # alter_text + 1 💥 TypeError: can only concatenate str (not "int") to str
> ```
### 2. Typumwandlung (Type Casting)
Um mit Eingabezahlen rechnen zu können, musst du sie in `int` (Ganzzahl) oder `float` (Kommazahl) umwandeln:
```python
# Ganze Zahl einlesen:
alter = int(input("Dein Alter in Jahren: "))
tage = alter * 365
# Kommazahl einlesen:
preis = float(input("Preis in Euro (z.B. 4.99): "))
rabatt = preis * 0.9
```
---
### 3. Moderne f-Strings (Formatierte Strings)
Seit Python 3.6 nutzt man **f-Strings** (ein vorangestelltes `f` vor den Anführungszeichen). Alles innerhalb geschweifter Klammern `{...}` wird direkt als Python-Code ausgewertet:
```python
name = "Mia"
punkte = 42
print(f"Spielerin {name} hat {punkte} Punkte (doppelt so viel: {punkte * 2})!")
```
---
### 4. Formatierungs-Cheat-Sheet in f-Strings
Hinter einem Doppelpunkt `:` in den geschweiften Klammern kannst du das Format exakt bestimmen:
| Format-Code | Bedeutung | Beispiel | Ergebnis |
| :--- | :--- | :--- | :--- |
| `{x:.2f}` | Kommazahl mit genau 2 Dezimalstellen | `{12.5:.2f} €` | `"12.50 €"` |
| `{x:.1f}` | Kommazahl mit genau 1 Dezimalstelle | `{23.148:.1f}` | `"23.1"` |
| `{x:.1%}` | Prozentangabe (multipliziert mit 100) | `{0.19:.1%}` | `"19.0%"` |
| `{n:04d}` | Ganzzahl mit führenden Nullen (4 Stellen) | `{7:04d}` | `"0007"` |
| `{s:>10}` | Text rechtsbündig (Breite 10) | `{"Python":>10}` | `" Python"` |
---
### 5. `print()` Parameter: `sep` und `end`
Die `print()`-Funktion hat zwei sehr praktische optionale Parameter:
- `sep`: Trennzeichen zwischen mehreren Werten (Standard: ein Leerzeichen `" "`).
- `end`: Zeichen am Ende der Ausgabe (Standard: Zeilenumbruch `"\n"`).
```python
# sep: Eigenes Trennzeichen
print("2026", "08", "29", sep="-")
# Ausgabe: 2026-08-29
# end: Kein Zeilenumbruch, nächste Ausgabe bleibt in derselben Zeile
print("Lade Fortschritt", end="... ")
print("100% Fertig!")
# Ausgabe: Lade Fortschritt... 100% Fertig!
```
---
## 🎯 Deine Aufgaben in `aufgabe.py`
Öffne `g03_ein_und_ausgabe/aufgabe.py` und implementiere die 4 Funktionen:
1. **TODO 1:** `begruessungs_text(name: str, stadt: str) -> str`
- Rückgabe: `f"Hallo {name}, herzlich willkommen in {stadt}!"`
2. **TODO 2:** `berechne_alter_in_tagen(jahre: int) -> int`
- Multipliziere `jahre * 365`.
3. **TODO 3:** `formatiere_rechnungsposten(artikel: str, anzahl: int, einzelpreis: float) -> str`
- Berechne Gesamtpreis und formatiere: `f"{anzahl}x {artikel} à {einzelpreis:.2f} € = {gesamt:.2f} €"`
4. **TODO 4:** `steckbrief(name: str, groesse_m: float, gewicht_kg: float) -> str`
- Berechne BMI: `gewicht_kg / (groesse_m ** 2)`
- Formatiere: `f"Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg:.1f} kg | BMI: {bmi:.1f}"`
---
## 🧪 Tests ausführen
Überprüfe deine Lösung im Terminal mit:
```bash
python3 test_aufgabe.py
```
Wenn alle 4 Tests mit **`OK`** durchlaufen, hast du das Kapitel gemeistert! 🎉