129 lines
4.6 KiB
Markdown
129 lines
4.6 KiB
Markdown
# 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! 🎉
|