Aufgaben-Python/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/index.html

489 lines
27 KiB
HTML
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.

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G04: Bedingungen & Verzweigungen</title>
<link rel="stylesheet" href="../../assets/style.css">
</head>
<body>
<div class="app-layout">
<aside class="app-sidebar">
<div class="sidebar-header">
<a href="../../index.html" class="sidebar-brand-link">
<div class="sidebar-logo">🐍</div>
<div>
<div class="sidebar-title">Python Portal</div>
<div class="sidebar-subtitle">Lernplattform</div>
</div>
</a>
</div>
<div class="sidebar-quick-nav">
<a href="../../index.html" class="sidebar-link">🏠 Startseite</a>
<a href="../../index.html#tutorial" class="sidebar-link">📖 Tutorial &amp; Workflow</a>
<a href="../../index.html#zertifikate" class="sidebar-link">🏆 Zertifikate</a>
</div>
<div class="sidebar-nav">
<div class="sidebar-group">
<div class="sidebar-group-title">
<span>🌱 1. Grundlagen</span>
<span style="background: rgba(255,255,255,0.1); padding: 2px 6px; border-radius: 99px; font-size: 0.7rem;">G01–G10</span>
</div>
<div style="display: flex; flex-direction: column; gap: 2px;">
<a href="../../lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🧮</span>
<span class="sidebar-link-text">G01. Taschenrechner</span>
</a>
<a href="../../lehrpfad_1_grundlagen/02_variablen_und_datentypen/index.html" class="sidebar-link">
<span class="sidebar-link-icon">📦</span>
<span class="sidebar-link-text">G02. Variablen & Typen</span>
</a>
<a href="../../lehrpfad_1_grundlagen/03_ein_und_ausgabe/index.html" class="sidebar-link">
<span class="sidebar-link-icon">💬</span>
<span class="sidebar-link-text">G03. Ein- & Ausgabe</span>
</a>
<a href="../../lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/index.html" class="sidebar-link active">
<span class="sidebar-link-icon">🚦</span>
<span class="sidebar-link-text">G04. Bedingungen (if)</span>
</a>
<a href="../../lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🎡</span>
<span class="sidebar-link-text">G05. Schleifen (for/while)</span>
</a>
<a href="../../lehrpfad_1_grundlagen/06_funktionen_und_module/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🪄</span>
<span class="sidebar-link-text">G06. Funktionen & Module</span>
</a>
<a href="../../lehrpfad_1_grundlagen/07_listen_und_sequenzen/index.html" class="sidebar-link">
<span class="sidebar-link-icon">📋</span>
<span class="sidebar-link-text">G07. Listen & Sequenzen</span>
</a>
<a href="../../lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🔤</span>
<span class="sidebar-link-text">G08. String-Methoden</span>
</a>
<a href="../../lehrpfad_1_grundlagen/09_dictionaries_und_sets/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🗃️</span>
<span class="sidebar-link-text">G09. Dicts & Sets</span>
</a>
<a href="../../lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🚀</span>
<span class="sidebar-link-text">G10. Comprehensions</span>
</a>
</div>
</div>
<div class="sidebar-group">
<div class="sidebar-group-title">
<span>🏗️ 2. OOP Einstieg</span>
<span style="background: rgba(255,255,255,0.1); padding: 2px 6px; border-radius: 99px; font-size: 0.7rem;">00–06</span>
</div>
<div style="display: flex; flex-direction: column; gap: 2px;">
<a href="../../lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🔍</span>
<span class="sidebar-link-text">00. Fehlersuche & Debug</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/01_einstieg_klassen/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🏗️</span>
<span class="sidebar-link-text">01. Einstieg in Klassen</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/02_init_und_self/index.html" class="sidebar-link">
<span class="sidebar-link-icon">⚙️</span>
<span class="sidebar-link-text">02. Konstruktor & self</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🏎️</span>
<span class="sidebar-link-text">03. Methoden & Verhalten</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/04_str_und_darstellung/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🧾</span>
<span class="sidebar-link-text">04. __str__ Darstellung</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/04b_umstieg_vscode/index.html" class="sidebar-link">
<span class="sidebar-link-icon">💻</span>
<span class="sidebar-link-text">04b. VS Code Setup</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🌿</span>
<span class="sidebar-link-text">04c. Git-Versionskontrolle</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/05_objekte_kombinieren/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🎵</span>
<span class="sidebar-link-text">05. Objekte kombinieren</span>
</a>
<a href="../../lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🥚</span>
<span class="sidebar-link-text">06. Projekt: Tamagotchi</span>
</a>
</div>
</div>
<div class="sidebar-group">
<div class="sidebar-group-title">
<span>🚀 3. Fortgeschritten</span>
<span style="background: rgba(255,255,255,0.1); padding: 2px 6px; border-radius: 99px; font-size: 0.7rem;">07–16</span>
</div>
<div style="display: flex; flex-direction: column; gap: 2px;">
<a href="../../lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🧠</span>
<span class="sidebar-link-text">07. Referenzen & Speicher</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder/index.html" class="sidebar-link">
<span class="sidebar-link-icon">➕</span>
<span class="sidebar-link-text">08. Operator Overloading</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🧪</span>
<span class="sidebar-link-text">09. Unit Tests & TDD</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🧬</span>
<span class="sidebar-link-text">10. Vererbung & super()</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🎭</span>
<span class="sidebar-link-text">11. Polymorphie</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🛡️</span>
<span class="sidebar-link-text">12. Exceptions & Fehler</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv/index.html" class="sidebar-link">
<span class="sidebar-link-icon">💾</span>
<span class="sidebar-link-text">13. Persistenz (JSON/CSV)</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🖥️</span>
<span class="sidebar-link-text">14. Desktop-GUIs (Tkinter)</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🎒</span>
<span class="sidebar-link-text">15. Container & *args</span>
</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt/index.html" class="sidebar-link">
<span class="sidebar-link-icon">🏆</span>
<span class="sidebar-link-text">16. Master-Abschlussprojekt</span>
</a>
</div>
</div>
</div>
<div class="sidebar-footer">
<div style="display: flex; align-items: center; justify-content: space-between;">
<div style="font-size: 0.85rem; font-weight: 700; color: white;" id="sidebar-level-text">⭐ Level 1</div>
<div style="font-size: 0.82rem; font-weight: 700; color: #38bdf8;" id="sidebar-xp-text">0 XP</div>
</div>
</div>
</aside>
<div class="app-main">
<header>
<div class="header-container">
<nav class="nav-links">
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../03_ein_und_ausgabe/index.html">&larr; Kapitel G03</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G04</span>
<span>&rsaquo;</span>
<a href="../05_schleifen_und_wiederholungen/index.html">Kapitel G05 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen G04 &bull; Schulabgleich 08.0</div>
<h1>Bedingungen &amp; Verzweigungen 🛤️🔀</h1>
<p>Lerne, wie dein Code mit <code>if</code>, <code>elif</code> und <code>else</code> intelligente Entscheidungen trifft und wie du logische Operatoren meisterst.</p>
</div>
</header>
<main class="container">
<!-- 📂 Schnellzugriff & Download aller Dateien dieser Einheit -->
<div style="background: #ffffff; border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 14px 20px; margin-bottom: 25px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; box-shadow: var(--shadow-sm);">
<div style="font-weight: 700; color: var(--text-main); display: flex; align-items: center; gap: 8px;">
<span>📂 Dateien dieser Einheit:</span>
</div>
<div style="display: flex; gap: 10px; flex-wrap: wrap;">
<a href="../../workspace.html?course=python&track=lehrpfad_1_grundlagen&chapter=04_verzweigungen_und_bedingungen" class="btn" style="background: #10b981; color: #fff; font-weight: 700;">💻 In Web-IDE öffnen &rarr;</a>
<a href="aufgabe.py" class="btn" style="padding: 6px 14px; font-size: 0.88rem; background: var(--primary);" download>📄 aufgabe.py (Startercode)</a>
<a href="test_aufgabe.py" class="btn btn-secondary" style="padding: 6px 14px; font-size: 0.88rem;" download>🧪 test_aufgabe.py (Tests)</a>
<a href="musterloesung.py" class="btn btn-secondary" style="padding: 6px 14px; font-size: 0.88rem;" download>💡 musterloesung.py (Lösung)</a>
<a href="README.md" class="btn btn-secondary" style="padding: 6px 14px; font-size: 0.88rem;">📖 README.md</a>
</div>
</div>
<!-- 1. Analogie & Einführung -->
<section class="card">
<h2>1. Die Eisenbahn-Weichen-Analogie 🚂</h2>
<p>
Code wird standardmäßig von oben nach unten Zeile für Zeile ausgeführt. Doch oft soll ein Programm je nach Situation einen anderen Pfad einschlagen: Ein Kinokassen-System berechnet für Kinder einen anderen Preis als für Erwachsene.
</p>
<div class="box box-analogie">
<div class="box-title">🛤️ Das Eisenbahngleis &amp; die Weichen:</div>
Stell dir den Programmlauf wie einen Zug vor, der auf ein Weichensystem zufährt:
<br>1. <strong>Das Signal (Bedingung):</strong> Die Weiche prüft: <em>"Ist das Alter unter 12?"</em>
<br>2. <strong>Grünes Signal (True):</strong> Der Zug biegt auf das Kindertarif-Gleis ab und führt dessen Code aus.
<br>3. <strong>Rotes Signal (False):</strong> Der Zug fährt weiter zur nächsten Weiche (<code>elif</code>).
<br>4. <strong>Das Ausweichgleis (else):</strong> Wenn keines der Signale grün war, nimmt der Zug das Standardgleis.
<br>5. <strong>Weiterfahrt:</strong> Hinter der Weichenanlage laufen alle Gleise wieder auf der Hauptstrecke zusammen!
</div>
</section>
<!-- 2. Syntax & Vergleichsoperatoren -->
<section class="card">
<h2>2. Syntax von <code>if / elif / else</code> &amp; Vergleichsoperatoren</h2>
<p>
In Python werden Verzweigungen mit Doppelpunkt <code>:</code> eingeleitet und der zugehörige Codeblock muss <strong>genau 4 Leerzeichen</strong> eingerückt sein.
</p>
<div class="code-container">
<div class="code-header">
<div class="code-dots">
<span class="code-dot dot-red"></span>
<span class="code-dot dot-yellow"></span>
<span class="code-dot dot-green"></span>
</div>
<span>Kino-Tarif-Weiche</span>
</div>
<pre><span class="kw">if</span> <span class="var">alter</span> < <span class="num">12</span>:
<span class="var">preis</span> = <span class="num">6.00</span> <span class="cm"># 4 Leerzeichen Einrückung</span>
<span class="kw">elif</span> <span class="var">alter</span> >= <span class="num">65</span>:
<span class="var">preis</span> = <span class="num">8.50</span>
<span class="kw">elif</span> <span class="var">ist_student</span>:
<span class="var">preis</span> = <span class="num">9.50</span>
<span class="kw">else</span>:
<span class="var">preis</span> = <span class="num">12.00</span></pre>
</div>
<div class="box box-warning">
<div class="box-title">⚠️ Häufige Fehlerquelle: = vs. ==</div>
- <code>=</code> (einfaches Istgleich) ist eine <strong>Zuweisung</strong>: <code>punkte = 10</code>.<br>
- <code>==</code> (doppeltes Istgleich) ist ein <strong>Vergleich</strong>: <code>if punkte == 10:</code>.
</div>
<h3>Die 6 Vergleichsoperatoren:</h3>
<div style="overflow-x: auto; margin: 15px 0;">
<table style="width: 100%; border-collapse: collapse; text-align: left; background: white; border-radius: 8px; overflow: hidden; box-shadow: var(--shadow-sm);">
<thead>
<tr style="background: var(--primary); color: white;">
<th style="padding: 10px 14px;">Operator</th>
<th style="padding: 10px 14px;">Bedeutung</th>
<th style="padding: 10px 14px;">Beispiel</th>
<th style="padding: 10px 14px;">Ergebnis</th>
</tr>
</thead>
<tbody>
<tr style="border-bottom: 1px solid var(--border-color);">
<td style="padding: 8px 14px;"><code>==</code></td>
<td style="padding: 8px 14px;">Gleich</td>
<td style="padding: 8px 14px;"><code>5 == 5</code></td>
<td style="padding: 8px 14px;"><strong style="color: var(--success);">True</strong></td>
</tr>
<tr style="border-bottom: 1px solid var(--border-color);">
<td style="padding: 8px 14px;"><code>!=</code></td>
<td style="padding: 8px 14px;">Ungleich</td>
<td style="padding: 8px 14px;"><code>5 != 3</code></td>
<td style="padding: 8px 14px;"><strong style="color: var(--success);">True</strong></td>
</tr>
<tr style="border-bottom: 1px solid var(--border-color);">
<td style="padding: 8px 14px;"><code>&lt;</code> / <code>&gt;</code></td>
<td style="padding: 8px 14px;">Kleiner als / Größer als</td>
<td style="padding: 8px 14px;"><code>10 &lt; 20</code></td>
<td style="padding: 8px 14px;"><strong style="color: var(--success);">True</strong></td>
</tr>
<tr>
<td style="padding: 8px 14px;"><code>&lt;=</code> / <code>&gt;=</code></td>
<td style="padding: 8px 14px;">Kleiner gleich / Größer gleich</td>
<td style="padding: 8px 14px;"><code>18 &gt;= 18</code></td>
<td style="padding: 8px 14px;"><strong style="color: var(--success);">True</strong></td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- 3. Logische Operatoren & Wahrheitstabellen -->
<section class="card">
<h2>3. Logische Operatoren &amp; Wahrheitstabellen 🧪</h2>
<p>
Bedingungen lassen sich mit <code>and</code>, <code>or</code> und <code>not</code> kombinieren:
</p>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 15px; margin: 15px 0;">
<!-- AND Tabelle -->
<div style="background: white; border: 1px solid var(--border-color); border-radius: 8px; padding: 14px; box-shadow: var(--shadow-sm);">
<h4 style="color: var(--primary); margin-bottom: 8px;"><code>and</code> (Beide wahr)</h4>
<table style="width: 100%; border-collapse: collapse; font-size: 0.88rem;">
<thead>
<tr style="background: var(--primary-light);">
<th style="padding: 4px 6px;">A</th>
<th style="padding: 4px 6px;">B</th>
<th style="padding: 4px 6px;">A and B</th>
</tr>
</thead>
<tbody>
<tr><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px; color: var(--success); font-weight: bold;">True</td></tr>
<tr><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px; color: var(--danger);">False</td></tr>
<tr><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px; color: var(--danger);">False</td></tr>
<tr><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px; color: var(--danger);">False</td></tr>
</tbody>
</table>
</div>
<!-- OR Tabelle -->
<div style="background: white; border: 1px solid var(--border-color); border-radius: 8px; padding: 14px; box-shadow: var(--shadow-sm);">
<h4 style="color: var(--secondary); margin-bottom: 8px;"><code>or</code> (Mind. eins wahr)</h4>
<table style="width: 100%; border-collapse: collapse; font-size: 0.88rem;">
<thead>
<tr style="background: #e0f2fe;">
<th style="padding: 4px 6px;">A</th>
<th style="padding: 4px 6px;">B</th>
<th style="padding: 4px 6px;">A or B</th>
</tr>
</thead>
<tbody>
<tr><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px; color: var(--success); font-weight: bold;">True</td></tr>
<tr><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px; color: var(--success); font-weight: bold;">True</td></tr>
<tr><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px; color: var(--success); font-weight: bold;">True</td></tr>
<tr><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px; color: var(--danger);">False</td></tr>
</tbody>
</table>
</div>
<!-- NOT Tabelle -->
<div style="background: white; border: 1px solid var(--border-color); border-radius: 8px; padding: 14px; box-shadow: var(--shadow-sm);">
<h4 style="color: var(--purple); margin-bottom: 8px;"><code>not</code> (Verneinung)</h4>
<table style="width: 100%; border-collapse: collapse; font-size: 0.88rem;">
<thead>
<tr style="background: var(--purple-light);">
<th style="padding: 4px 6px;">A</th>
<th style="padding: 4px 6px;">not A</th>
</tr>
</thead>
<tbody>
<tr><td style="padding: 4px 6px;">True</td><td style="padding: 4px 6px; color: var(--danger); font-weight: bold;">False</td></tr>
<tr><td style="padding: 4px 6px;">False</td><td style="padding: 4px 6px; color: var(--success); font-weight: bold;">True</td></tr>
</tbody>
</table>
</div>
</div>
<div class="box box-tipp">
<div class="box-title">💡 Tipp: Klammern setzen für klare Lesbarkeit</div>
Genau wie in der Mathematik gilt: Klammern <code>(...)</code> binden stärker und machen deinen Code absolut unmissverständlich!<br>
<code>darf_fahren = (groesse &gt;= 140) or (groesse &gt;= 120 and begleitung)</code>
</div>
</section>
<!-- 4. Deine Aufgaben -->
<section class="card">
<h2>4. 📝 Deine Aufgaben in <code><a href="aufgabe.py" style="color: inherit; text-decoration: underline;">aufgabe.py</a></code></h2>
<p>Öffne <code><a href="aufgabe.py" style="color: inherit; text-decoration: underline;">aufgabe.py</a></code> und setze folgende 4 Funktionen um:</p>
<ul class="task-list">
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t1">
<label for="t1" class="task-label">
<strong>TODO 1: <code>ticket_preis(alter: int, ist_student: bool) -> float</code></strong><br>
Berechne den Kinopreis: <code>alter &lt; 12</code> &rarr; 6.00 €, <code>alter &gt;= 65</code> &rarr; 8.50 €, sonst bei <code>ist_student == True</code> &rarr; 9.50 €, sonst &rarr; 12.00 €.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t2">
<label for="t2" class="task-label">
<strong>TODO 2: <code>schulnote_text(punkte: int) -> str</code></strong><br>
Notenspiegel: Ungültig bei <code>&lt; 0</code> oder <code>&gt; 100</code> ("Ungültige Punktezahl"), ab 90 ("Sehr gut"), ab 75 ("Gut"), ab 60 ("Befriedigend"), ab 50 ("Genügend"), sonst ("Nicht genügend").
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t3">
<label for="t3" class="task-label">
<strong>TODO 3: <code>ist_schaltjahr(jahr: int) -> bool</code></strong><br>
Prüfe die Schaltjahr-Regel: Durch 4 teilbar, aber nicht durch 100 (außer wenn durch 400 teilbar).
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t4">
<label for="t4" class="task-label">
<strong>TODO 4: <code>kann_achterbahn_fahren(groesse_cm: int, begleitung_erwachsen: bool) -> bool</code></strong><br>
Freizeitpark-Zulassung: Ab 140 cm immer erlaubt (True). Zwischen 120 und 139 cm nur mit erwachsener Begleitung (True). Unter 120 cm nie erlaubt (False).
</label>
</li>
</ul>
<h3>💡 Lösungshinweise (Aufklappen bei Bedarf)</h3>
<details>
<summary>🔍 Tipp zu TODO 2 (Reihenfolge der Notenstufen)</summary>
<div class="details-content">
<p>Prüfe zuerst die ungültigen Werte (<code>punkte &lt; 0 or punkte &gt; 100</code>). Danach kannst du bequem von oben nach unten mit <code>&gt;= 90</code>, <code>&gt;= 75</code> usw. prüfen!</p>
<div class="code-container">
<pre><code>if punkte < 0 or punkte > 100:
return "Ungültige Punktezahl"
elif punkte >= 90:
return "Sehr gut"
# ...</code></pre>
</div>
</div>
</details>
<details>
<summary>🔍 Tipp zu TODO 3 (Modulo % &amp; Schaltjahre)</summary>
<div class="details-content">
<p>Mit dem Modulo-Operator <code>%</code> prüfst du die Teilbarkeit (Restwert der Division ist 0):</p>
<div class="code-container">
<pre><code>if (jahr % 4 == 0 and jahr % 100 != 0) or (jahr % 400 == 0):
return True
return False</code></pre>
</div>
</div>
</details>
</section>
<!-- 5. Testen & Navigation -->
<section class="card">
<h2>5. 🧪 Automatische Tests &amp; Überprüfung</h2>
<p>Führe das Testskript im Terminal aus:</p>
<div class="code-container">
<div class="code-header">
<span>Terminal</span>
</div>
<pre><code>python3 test_aufgabe.py</code></pre>
</div>
<p>Oder teste das interaktive Programm mit eigenen Eingaben:</p>
<div class="code-container">
<div class="code-header"><span>Interaktiver Test</span></div>
<pre><code>python3 aufgabe.py</code></pre>
</div>
<div class="footer-nav">
<a href="../03_ein_und_ausgabe/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G03</a>
<a href="../05_schleifen_und_wiederholungen/index.html" class="btn">Weiter zu Kapitel G05: Schleifen &rarr;</a>
</div>
</section>
</main>
</div>
</div>
<button type="button" class="sidebar-mobile-toggle"><span>☰ Menü</span></button>
<div class="sidebar-overlay"></div>
<!-- Scripts -->
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
<script src="../../assets/interpreter.js"></script>
<script src="../../assets/certificate.js"></script>
<script src="../../assets/parsons.js"></script>
<script src="../../assets/runner.js"></script>
<script src="../../assets/ui_enhancements.js"></script>
<script src="../../assets/sidebar.js"></script>
</body>
</html>