it-praxisportal/00_fehlersuche_und_grundlagen/index.html

209 lines
9.6 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 00: Fehlersuche & Grundlagen</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<header>
<div class="header-container">
<nav class="nav-links">
<a href="../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel 00</span>
<span>&rsaquo;</span>
<a href="../01_einstieg_klassen/index.html">Kapitel 01 &rarr;</a>
</nav>
<div class="header-badge">Vorkapitel 00</div>
<h1>Python Fehlersuche &amp; Grundlagen 🔍🕵️‍♀️</h1>
<p>Lerne, wie du Fehlermeldungen richtig liest, Einrückungsfehler behebst und Bugs wie eine echte Detektivin aufspürst.</p>
</div>
</header>
<main class="container">
<!-- 1. Keine Panik vor Fehlermeldungen -->
<section class="card">
<h2>1. Die wichtigste Regel: Keine Panik bei Fehlern!</h2>
<p>
Jeder Programmierer auf der Welt – selbst bei Google oder Apple – schreibt täglich dutzende Fehler.
</p>
<div class="box box-analogie">
<div class="box-title">💡 Der Computer ist dein Assistent, kein Richter:</div>
Wenn Python eine rote Fehlermeldung (einen sogenannten <strong>Traceback</strong>) anzeigt, ist das nichts Schlimmes. Der Computer sagt dir damit nur: <em>"Hey, hier verstehe ich in Zeile X etwas noch nicht ganz – kannst du mir kurz helfen?"</em>
</div>
<h3>Wie liest man einen Traceback? (Die Unten-nach-Oben-Regel)</h3>
<p>
Ein Traceback kann lang und einschüchternd wirken. Doch das Geheimnis ist: <strong>Lies immer ganz unten!</strong>
</p>
<div class="code-container">
<div class="code-header">
<span>Beispiel einer Fehlermeldung</span>
</div>
<pre>Traceback (most recent call last):
File "aufgabe.py", line 12, in berechne_rabatt
ergebnis = preis * rabatt_prozent
<span class="kw" style="color: #ef4444;">TypeError</span>: can't multiply sequence by non-int of type 'float'
<span class="cm">▲ ▲</span>
<span class="cm">1. ART DES FEHLERS 2. DIE ERKLÄRUNG</span></pre>
</div>
<p>
Ganz unten steht:
<br>1. <strong>Um welchen Fehler handelt es sich?</strong> (z.B. <code>TypeError</code>)
<br>2. <strong>Was genau ist schiefgelaufen?</strong> (z.B. Text mit Kommazahl multipliziert)
<br>3. Direkt in der Zeile darüber steht die <strong>Dateiname und Zeilennummer</strong> (z.B. <code>line 12</code>)!
</p>
</section>
<!-- 2. Die 4 häufigsten Anfängerfehler -->
<section class="card">
<h2>2. Die 4 häufigsten Python-Fehler im Überblick</h2>
<!-- Fehler 1: Indentation -->
<div class="box box-warning">
<div class="box-title">1. IndentationError (Einrückungsfehler)</div>
<p>In Python haben Einrückungen eine feste Bedeutung. Alles, was in einer Funktion, Schleife oder Bedingung steht, muss <strong>genau 4 Leerzeichen</strong> eingerückt sein.</p>
</div>
<div class="code-container">
<div class="code-header"><span>Vergleich: Einrückung</span></div>
<pre><span class="cm"># ❌ Falsch:</span>
<span class="kw">def</span> <span class="fn">begruessung</span>(<span class="var">name</span>):
<span class="fn">print</span>(<span class="str">"Hallo"</span>, <span class="var">name</span>) <span class="cm"># 💥 IndentationError: expected an indented block</span>
<span class="cm"># ✅ Richtig:</span>
<span class="kw">def</span> <span class="fn">begruessung</span>(<span class="var">name</span>):
<span class="fn">print</span>(<span class="str">"Hallo"</span>, <span class="var">name</span>) <span class="cm"># 4 Leerzeichen eingerückt!</span></pre>
</div>
<!-- Fehler 2: SyntaxError -->
<div class="box box-warning">
<div class="box-title">2. SyntaxError (Tippfehler &amp; fehlende Doppelpunkte)</div>
<p>Häufig vergessen: Der Doppelpunkt <code>:</code> am Ende von <code>def</code>, <code>if</code>, <code>else</code>, <code>for</code> oder <code>while</code>, oder eine ungeschlossene Klammer.</p>
</div>
<div class="code-container">
<div class="code-header"><span>Vergleich: Syntax</span></div>
<pre><span class="cm"># ❌ Falsch: Doppelpunkt vergessen</span>
<span class="kw">if</span> <span class="var">alter</span> >= <span class="num">18</span>
<span class="fn">print</span>(<span class="str">"Volljährig"</span>) <span class="cm"># 💥 SyntaxError: expected ':'</span>
<span class="cm"># ✅ Richtig:</span>
<span class="kw">if</span> <span class="var">alter</span> >= <span class="num">18</span>:
<span class="fn">print</span>(<span class="str">"Volljährig"</span>)</pre>
</div>
<!-- Fehler 3: NameError -->
<div class="box box-warning">
<div class="box-title">3. NameError (Unbekannter Name / Tippfehler)</div>
<p>Tritt auf, wenn eine Variable oder Funktion aufgerufen wird, die nicht existiert (oder falsch geschrieben wurde).</p>
</div>
<div class="code-container">
<div class="code-header"><span>Vergleich: NameError</span></div>
<pre><span class="var">spieler_name</span> = <span class="str">"Alex"</span>
<span class="fn">print</span>(<span class="var">spielr_name</span>) <span class="cm"># 💥 NameError: name 'spielr_name' is not defined (Tippfehler!)</span></pre>
</div>
<!-- Fehler 4: TypeError -->
<div class="box box-warning">
<div class="box-title">4. TypeError (Falscher Datentyp)</div>
<p>Tritt auf, wenn man Operationen mit unpassenden Typen versucht (z.B. Zahl an Text anhängen mit <code>+</code> statt f-String).</p>
</div>
<div class="code-container">
<div class="code-header"><span>Vergleich: TypeError</span></div>
<pre><span class="var">punkte</span> = <span class="num">100</span>
<span class="cm"># ❌ Falsch:</span>
<span class="fn">print</span>(<span class="str">"Du hast "</span> + <span class="var">punkte</span> + <span class="str">" Punkte!"</span>) <span class="cm"># 💥 TypeError: can only concatenate str to str</span>
<span class="cm"># ✅ Richtig mit f-String:</span>
<span class="fn">print</span>(<span class="str">f"Du hast {punkte} Punkte!"</span>)</pre>
</div>
</section>
<!-- 3. Detektiv-Aufgabe -->
<section class="card">
<h2>3. 🕵️‍♀️ Deine Detektiv-Aufgabe in <code>aufgabe.py</code></h2>
<p>
In der Datei <code>00_fehlersuche_und_grundlagen/aufgabe.py</code> findest du ein kleines Programm für ein Quiz-Spiel, in dem sich <strong>5 typische Fehler</strong> versteckt haben!
</p>
<p>Deine Mission als Code-Detektivin:</p>
<ul class="task-list">
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="b1">
<label for="b1" class="task-label">
<strong>Bug 1 (SyntaxError):</strong> Finde den fehlenden Doppelpunkt in der Funktionsdefinition <code>berechne_endstand</code>.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="b2">
<label for="b2" class="task-label">
<strong>Bug 2 (IndentationError):</strong> Korrigiere die falsche Einrückung in der <code>if</code>-Bedingung.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="b3">
<label for="b3" class="task-label">
<strong>Bug 3 (NameError):</strong> Korrigiere den Tippfehler beim Variablennamen <code>spieler_punkte</code>.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="b4">
<label for="b4" class="task-label">
<strong>Bug 4 (TypeError):</strong> Korrigiere die Textzusammensetzung in <code>formatierte_ausgabe</code> (nutze einen sauberen f-String).
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="b5">
<label for="b5" class="task-label">
<strong>Bug 5 (Logik-Fehler):</strong> Die Funktion <code>ist_sieger</code> soll ab <strong>50 Punkten oder mehr</strong> <code>True</code> zurückgeben (prüfe <code>&gt;=</code> statt <code>&gt;</code>).
</label>
</li>
</ul>
<h3>💡 Lösungshinweise (Aufklappen bei Bedarf)</h3>
<details>
<summary>🔍 Tipp zur Ausführung im Terminal</summary>
<div class="details-content">
<p>Führe das Skript einfach direkt im Terminal aus:</p>
<div class="code-container">
<pre><code>python3 aufgabe.py</code></pre>
</div>
<p>Python zeigt dir sofort den ersten Fehler an. Repariere ihn, führe das Skript erneut aus und arbeite dich so Schritt für Schritt durch!</p>
</div>
</details>
</section>
<!-- 4. Testen & Navigation -->
<section class="card">
<h2>4. 🧪 Detektiv-Prüfung abschließen</h2>
<p>Sobald du alle Fehler behoben hast, teste deine Lösung mit:</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="../index.html" class="btn btn-secondary">&larr; Zurück zur Übersicht</a>
<a href="../01_einstieg_klassen/index.html" class="btn">Weiter zu Kapitel 01: Klassen &rarr;</a>
</div>
</section>
</main>
</body>
</html>