it-praxisportal/g04_verzweigungen_und_bedingungen/README.md

129 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kapitel G04: Verzweigungen & Bedingungen (Schulabgleich 08.0) 🛤️🔀
Herzlich willkommen zum Kapitel **Bedingungen und Verzweigungen**!
Programme müssen oft Entscheidungen treffen: *Darf die Person schon Auto fahren?*, *Bekommt sie einen Rabatt?*, *Ist heute ein Schaltjahr?*. In Python steuern wir solche Entscheidungen mit `if`, `elif` und `else`.
---
## 🎯 Lernziele
1. **Entscheidungsstrukturen verstehen:** `if`, `elif` und `else` für logische Programmabläufe einsetzen.
2. **Die Eisenbahn-Weichen-Analogie begreifen:** Sobald die erste Bedingung zutrifft, werden alle nachfolgenden `elif`/`else`-Zweige übersprungen.
3. **Vergleichsoperatoren beherrschen:** `==`, `!=`, `<`, `>`, `<=`, `>=`.
4. **Logische Operatoren kombinieren:** `and` (und), `or` (oder), `not` (nicht / Verneinung).
5. **Klammern & Rangfolge anwenden:** Komplexe Bedingungen mit `()` sicher strukturieren.
6. **Flache vs. tief verschachtelte Bedingungen:** Sauberen, lesbaren Code nach dem KISS-Prinzip schreiben.
---
## 💡 Theorie & Wichtige Konzepte
### 1. Die Weichen-Analogie (Eisenbahn-Gleis) 🛤️
Stell dir dein Programm wie einen Zug auf den Schienen vor. An einer Weiche entscheidet das Signal (`Bedingung`), auf welches Gleis der Zug abbiegt:
```python
if alter < 12:
preis = 6.0 # Gleis 1 (Kind)
elif alter >= 65:
preis = 8.5 # Gleis 2 (Senior)
elif ist_student:
preis = 9.5 # Gleis 3 (Student)
else:
preis = 12.0 # Ausweichgleis (Standard-Erwachsener)
```
> 🔑 **Wichtig:** Python prüft die Bedingungen von oben nach unten. Der **erste** Block, dessen Bedingung `True` ergibt, wird ausgeführt. Danach verlässt Python die gesamte Weiche!
---
### 2. Die Vergleichsoperatoren
| Operator | Bedeutung | Beispiel | Ergebnis |
| :---: | :--- | :--- | :--- |
| `==` | Ist gleich? *(Vorsicht: Nicht mit Zuweisung `=` verwechseln!)* | `5 == 5` | `True` |
| `!=` | Ist ungleich? | `5 != 3` | `True` |
| `<` | Kleiner als | `10 < 20` | `True` |
| `>` | Größer als | `10 > 20` | `False` |
| `<=` | Kleiner oder gleich (Grenzwert inkludiert) | `10 <= 10` | `True` |
| `>=` | Größer oder gleich (Grenzwert inkludiert) | `18 >= 18` | `True` |
---
### 3. Logische Operatoren & Wahrheitstabellen
Oft reicht eine einzelne Bedingung nicht aus. Mit logischen Operatoren verknüpfst du mehrere Bedingungen:
#### `and` (Logisches UND – Beide müssen wahr sein):
| Bedingung A | Bedingung B | `A and B` |
| :---: | :---: | :---: |
| `True` | `True` | **`True`** |
| `True` | `False` | `False` |
| `False` | `True` | `False` |
| `False` | `False` | `False` |
#### `or` (Logisches ODER – Mindestens eins muss wahr sein):
| Bedingung A | Bedingung B | `A or B` |
| :---: | :---: | :---: |
| `True` | `True` | **`True`** |
| `True` | `False` | **`True`** |
| `False` | `True` | **`True`** |
| `False` | `False` | `False` |
#### `not` (Logisches NICHT – Dreht den Wahrheitswert um):
- `not True` ergibt `False`
- `not False` ergibt `True`
---
### 4. Das Schaltjahr-Rätsel 📅
Ein schönes Praxisbeispiel für logische Verknüpfungen ist die gregorianische Schaltjahr-Regel:
1. Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist (`jahr % 4 == 0`).
2. Säkularjahre (Jahrhunderte wie 1900, 2100) sind **keine** Schaltjahre (`jahr % 100 != 0`),
3. **außer** sie sind durch 400 teilbar (wie 2000, 2400: `jahr % 400 == 0`).
In Python formuliert:
```python
ist_schalt = (jahr % 4 == 0 and jahr % 100 != 0) or (jahr % 400 == 0)
```
---
## 🎯 Deine Aufgaben in `aufgabe.py`
Öffne `g04_verzweigungen_und_bedingungen/aufgabe.py` und implementiere die 4 Funktionen:
1. **TODO 1: Kinokarten-Preisrechner**
- `ticket_preis(alter: int, ist_student: bool) -> float`
- Alter < 12: `6.0` €
- Alter >= 65: `8.5` €
- 12 bis 64 Jahre: Wenn `ist_student` -> `9.5` €, sonst -> `12.0` €
2. **TODO 2: Schulnoten-Ermittlung**
- `schulnote_text(punkte: int) -> str`
- `< 0` oder `> 100`: `"Ungültige Punktezahl"`
- `>= 90`: `"Sehr gut"`, `>= 75`: `"Gut"`, `>= 60`: `"Befriedigend"`, `>= 50`: `"Genügend"`, `< 50`: `"Nicht genügend"`
3. **TODO 3: Schaltjahr-Erkennung**
- `ist_schaltjahr(jahr: int) -> bool`
- `(jahr % 4 == 0 and jahr % 100 != 0) or (jahr % 400 == 0)`
4. **TODO 4: Achterbahn-Zulassung**
- `kann_achterbahn_fahren(groesse_cm: int, begleitung_erwachsen: bool) -> bool`
- Ab 140 cm: immer `True`
- Ab 120 cm bis 139 cm: `True`, wenn `begleitung_erwachsen == True`, sonst `False`
- Unter 120 cm: immer `False`
---
## 🧪 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! 🎉