Aufgaben-Python/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/index.html

454 lines
26 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>
<link rel="icon" type="image/svg+xml" href="../../assets/favicon.svg">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G10: Comprehensions, Datum &amp; Algorithmen</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">
<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 active">
<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="../09_dictionaries_und_sets/index.html">&larr; Kapitel G09</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G10</span>
<span>&rsaquo;</span>
<a href="../../lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html">Lehrpfad 2: OOP &rarr;</a>
</nav>
<div class="header-badge">Kapitel G10 &bull; Schulabgleich 13.0 &amp; 15.1</div>
<h1>Comprehensions, Datum &amp; Algorithmen 🚀📅</h1>
<p>Lerne, wie du elegante Einzeiler schreibst, mit Zeitspannen rechnest und grundlegende Such- und Filter-Algorithmen 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=10_comprehensions_datum_algorithmen" 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. List Comprehensions: Das Schnellschienen-Fließband -->
<section class="card">
<h2>1. List Comprehensions: Das Schnellschienen-Fließband</h2>
<p>
In Python musst du nicht jedes Mal eine leere Liste erstellen und eine 4-zeilige <code>for</code>-Schleife mit <code>.append()</code> schreiben.
Mit <strong>List Comprehensions</strong> erstellst und filterst du Listen in einer einzigen, eleganten Zeile!
</p>
<div class="box box-analogie">
<div class="box-title">🏭 Die Fließband- &amp; Filtersieb-Analogie:</div>
<p>Stell dir ein automatisiertes Fließband in einer Manufaktur vor:</p>
<ul style="margin-left: 20px; margin-top: 8px;">
<li>Die Rohstoffe (Elemente aus der Ausgangsliste) laufen über das Band (<code>for x in liste</code>).</li>
<li>Ein Sensor sortiert unpassende Teile sofort aus (<code>if x % 2 == 0</code>).</li>
<li>Am Ende wird das Teil direkt veredelt oder berechnet (<code>x ** 2</code>) und fällt fertig verpackt in die neue Liste!</li>
</ul>
</div>
<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>Vergleich: Traditionelle Schleife vs. List Comprehension</span>
</div>
<pre><span class="cm"># 🐢 Vorher: Traditionelle for-Schleife (4 Zeilen)</span>
<span class="var">gerade_quadrate</span> = []
<span class="kw">for</span> <span class="var">x</span> <span class="kw">in</span> <span class="fn">range</span>(<span class="num">1</span>, <span class="num">7</span>):
<span class="kw">if</span> <span class="var">x</span> % <span class="num">2</span> == <span class="num">0</span>:
<span class="var">gerade_quadrate</span>.<span class="fn">append</span>(<span class="var">x</span> ** <span class="num">2</span>)
<span class="cm"># 🚀 Nachher: Elegante List Comprehension (1 Zeile!)</span>
<span class="var">gerade_quadrate</span> = [<span class="var">x</span> ** <span class="num">2</span> <span class="kw">for</span> <span class="var">x</span> <span class="kw">in</span> <span class="fn">range</span>(<span class="num">1</span>, <span class="num">7</span>) <span class="kw">if</span> <span class="var">x</span> % <span class="num">2</span> == <span class="num">0</span>]
<span class="fn">print</span>(<span class="var">gerade_quadrate</span>) <span class="cm"># [4, 16, 36]</span></pre>
</div>
<h3>Dict Comprehensions: Dictionaries on the fly</h3>
<div class="code-container">
<div class="code-header"><span>Dict Comprehension Syntax</span></div>
<pre><span class="var">woerter</span> = [<span class="str">"Python"</span>, <span class="str">"Code"</span>, <span class="str">"Entwicklung"</span>]
<span class="var">laengen</span> = {<span class="var">w</span>: <span class="fn">len</span>(<span class="var">w</span>) <span class="kw">for</span> <span class="var">w</span> <span class="kw">in</span> <span class="var">woerter</span>}
<span class="fn">print</span>(<span class="var">laengen</span>) <span class="cm"># {'Python': 6, 'Code': 4, 'Entwicklung': 11}</span></pre>
</div>
</section>
<!-- 2. Datum & Zeit mit datetime -->
<section class="card">
<h2>2. Datum, Uhrzeit &amp; Zeitspannen (Das <code>datetime</code>-Modul)</h2>
<p>
Egal ob Ticket-Buchung, Geburtstags-Erinnerung oder Spielstand-Speicherung: Zeitberechnungen gehören zum Alltag jeder Programmiererin.
</p>
<div class="box box-analogie">
<div class="box-title">🗓️ Die Kalender- &amp; Stoppuhr-Analogie:</div>
<ul style="margin-left: 20px; margin-top: 8px;">
<li><code>date</code> &amp; <code>datetime</code> sind wie dein Kalender: Ein festes Datum wie der 24.12.2026.</li>
<li><code>timedelta</code> ist wie eine Zeitspanne (z.B. "+ 14 Tage" oder "- 3 Stunden").</li>
</ul>
</div>
<div class="code-container">
<div class="code-header">
<span>Python: Rechnen mit datetime &amp; timedelta</span>
</div>
<pre><span class="kw">from</span> <span class="var">datetime</span> <span class="kw">import</span> <span class="var">datetime</span>, <span class="var">date</span>, <span class="var">timedelta</span>
<span class="cm"># 1. Heute ermitteln:</span>
<span class="var">heute</span> = <span class="var">date</span>.<span class="fn">today</span>()
<span class="cm"># 2. Text in Datum parsen (.strptime):</span>
<span class="var">urlaub</span> = <span class="var">datetime</span>.<span class="fn">strptime</span>(<span class="str">"2026-07-15"</span>, <span class="str">"%Y-%m-%d"</span>).<span class="fn">date</span>()
<span class="cm"># 3. Differenz in Tagen berechnen:</span>
<span class="var">tage_bis_urlaub</span> = (<span class="var">urlaub</span> - <span class="var">heute</span>).<span class="attr">days</span>
<span class="fn">print</span>(<span class="str">f"Noch {tage_bis_urlaub} Tage bis zum Urlaub!"</span>)
<span class="cm"># 4. Deutsches Datumsformat ausgeben (.strftime):</span>
<span class="fn">print</span>(<span class="var">urlaub</span>.<span class="fn">strftime</span>(<span class="str">"%d.%m.%Y"</span>)) <span class="cm"># Ausgabe: "15.07.2026"</span></pre>
</div>
<h3>Wichtige Formatierungs-Kürzel</h3>
<table style="width: 100%; border-collapse: collapse; margin: 15px 0;">
<thead>
<tr style="background: var(--primary-light); text-align: left;">
<th style="padding: 10px; border: 1px solid var(--border-color);">Kürzel</th>
<th style="padding: 10px; border: 1px solid var(--border-color);">Bedeutung</th>
<th style="padding: 10px; border: 1px solid var(--border-color);">Beispiel</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>%d</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Tag im Monat mit führender Null (01..31)</td>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>05</code> oder <code>29</code></td>
</tr>
<tr style="background: #fafafa;">
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>%m</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Monat mit führender Null (01..12)</td>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>08</code></td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>%Y</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Vierstelliges Jahr</td>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>2026</code></td>
</tr>
</tbody>
</table>
</section>
<!-- 3. Grundlegende Algorithmen -->
<section class="card">
<h2>3. Grundlegende Algorithmen: Min/Max, Suchen &amp; Sortieren</h2>
<p>
Ein <strong>Algorithmus</strong> ist eine präzise Handlungsanweisung zur Lösung eines Problems.
Hier lernst du die wichtigsten Muster kennen:
</p>
<div class="code-container">
<div class="code-header">
<span>Maximum suchen mit key=</span>
</div>
<pre><span class="var">personen</span> = [
{<span class="str">"name"</span>: <span class="str">"Anna"</span>, <span class="str">"alter"</span>: <span class="num">25</span>},
{<span class="str">"name"</span>: <span class="str">"Ben"</span>, <span class="str">"alter"</span>: <span class="num">32</span>},
{<span class="str">"name"</span>: <span class="str">"Clara"</span>, <span class="str">"alter"</span>: <span class="num">19</span>}
]
<span class="cm"># Die älteste Person mit max() und Lambda-Schlüssel finden:</span>
<span class="var">aelteste</span> = <span class="fn">max</span>(<span class="var">personen</span>, <span class="var">key</span>=<span class="kw">lambda</span> <span class="var">p</span>: <span class="var">p</span>[<span class="str">"alter"</span>])
<span class="fn">print</span>(<span class="str">f"Älteste Person: {aelteste['name']} ({aelteste['alter']} Jahre)"</span>)
<span class="cm"># Ausgabe: Älteste Person: Ben (32 Jahre)</span></pre>
</div>
</section>
<!-- 4. Aufgaben & Checkliste -->
<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 die Datei <code><a href="aufgabe.py" style="color: inherit; text-decoration: underline;">aufgabe.py</a></code> und bearbeite die folgenden 5 Aufgaben:</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>quadratzahlen_gerade</code>):</strong> Erzeuge mit einer List Comprehension eine Liste mit den Quadraten aller geraden Zahlen.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t2">
<label for="t2" class="task-label">
<strong>TODO 2 (<code>filtriere_lange_woerter</code>):</strong> Filtere alle Wörter heraus, deren Zeichenlänge mindestens <code>min_laenge</code> beträgt.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t3">
<label for="t3" class="task-label">
<strong>TODO 3 (<code>tage_bis_datum</code>):</strong> Parse ein Datums-String (<code>YYYY-MM-DD</code>) und berechne die Differenz in Tagen zu heute.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t4">
<label for="t4" class="task-label">
<strong>TODO 4 (<code>formatiere_deutsches_datum</code>):</strong> Formatiere ein <code>date</code>- oder <code>datetime</code>-Objekt mit <code>.strftime()</code> im Format <code>DD.MM.YYYY</code>.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="t5">
<label for="t5" class="task-label">
<strong>TODO 5 (<code>finde_aelteste_person</code>):</strong> Suche in einer Liste von Personen-Dictionaries die Person mit dem größten Alter und gib ihren Namen zurück (oder <code>""</code> bei leerer Liste).
</label>
</li>
</ul>
<h3>💡 Lösungshinweise (Aufklappen bei Bedarf)</h3>
<details>
<summary>🔍 Tipp zu TODO 1 &amp; 2 (List Comprehensions)</summary>
<div class="details-content">
<div class="code-container">
<pre><span class="cm"># TODO 1:</span>
<span class="kw">return</span> [<span class="var">x</span> ** <span class="num">2</span> <span class="kw">for</span> <span class="var">x</span> <span class="kw">in</span> <span class="var">zahlen</span> <span class="kw">if</span> <span class="var">x</span> % <span class="num">2</span> == <span class="num">0</span>]
<span class="cm"># TODO 2:</span>
<span class="kw">return</span> [<span class="var">w</span> <span class="kw">for</span> <span class="var">w</span> <span class="kw">in</span> <span class="var">woerter</span> <span class="kw">if</span> <span class="fn">len</span>(<span class="var">w</span>) >= <span class="var">min_laenge</span>]</pre>
</div>
</div>
</details>
<details>
<summary>🔍 Tipp zu TODO 3 (Datum einlesen &amp; subtrahieren)</summary>
<div class="details-content">
<div class="code-container">
<pre><span class="var">ziel</span> = <span class="var">datetime</span>.<span class="fn">strptime</span>(<span class="var">ziel_datum_str</span>, <span class="str">"%Y-%m-%d"</span>).<span class="fn">date</span>()
<span class="var">heute</span> = <span class="var">date</span>.<span class="fn">today</span>()
<span class="kw">return</span> (<span class="var">ziel</span> - <span class="var">heute</span>).<span class="attr">days</span></pre>
</div>
</div>
</details>
</section>
<!-- 5. Testen & Navigation -->
<section class="card">
<h2>5. 🧪 Lösung überprüfen &amp; Kursabschluss</h2>
<p>Führe den Test 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>
<div class="footer-nav">
<a href="../09_dictionaries_und_sets/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G09</a>
<a href="../../lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html" class="btn">Weiter zu Lehrpfad 2: OOP &amp; Klassen &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>