diff --git a/.gamification.json b/.gamification.json index 8ef0d9a..d50ed80 100644 --- a/.gamification.json +++ b/.gamification.json @@ -10,5 +10,5 @@ "streak_tage": 1, "letzter_aktiver_tag": "2026-08-29", "historie": [], - "zuletzt_aktualisiert": "2026-08-29T15:40:02.637013" + "zuletzt_aktualisiert": "2026-08-29T15:41:25.557977" } \ No newline at end of file diff --git a/assets/gamification_data.js b/assets/gamification_data.js index d46c4b7..bd7d817 100644 --- a/assets/gamification_data.js +++ b/assets/gamification_data.js @@ -11,7 +11,7 @@ window.GAMIFICATION_DATA = { "streak_tage": 1, "letzter_aktiver_tag": "2026-08-29", "historie": [], - "zuletzt_aktualisiert": "2026-08-29T15:40:02.637013" + "zuletzt_aktualisiert": "2026-08-29T15:41:25.557977" }; window.GAMIFICATION_BADGES_KATALOG = { "rechenkonegin": { diff --git a/assets/runner.js b/assets/runner.js new file mode 100644 index 0000000..a557835 --- /dev/null +++ b/assets/runner.js @@ -0,0 +1,134 @@ +/** + * ⚡ ZERO-SETUP IN-BROWSER PYTHON RUNNER (Pyodide / WebAssembly) ⚡ + * ================================================================= + * Ermöglicht das direkte Ausführen von Python-Code im Browser mit 1 Klick! + * Funktioniert mit Pyodide (WebAssembly) oder sicherem lokalem Interpreter. + */ + +(function () { + let pyodideInstance = null; + let isPyodideLoading = false; + + async function getPyodide() { + if (pyodideInstance) return pyodideInstance; + if (isPyodideLoading) { + while (isPyodideLoading) { + await new Promise(r => setTimeout(r, 100)); + } + return pyodideInstance; + } + + isPyodideLoading = true; + try { + if (typeof loadPyodide === "undefined") { + // Dynamisch Pyodide-Script laden + await new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = "https://cdn.jsdelivr.net/pyodide/v0.25.0/full/pyodide.js"; + script.onload = resolve; + script.onerror = reject; + document.head.appendChild(script); + }); + } + pyodideInstance = await loadPyodide({ + stdout: (text) => appendOutput(text, "stdout"), + stderr: (text) => appendOutput(text, "stderr") + }); + isPyodideLoading = false; + return pyodideInstance; + } catch (e) { + isPyodideLoading = false; + console.warn("Pyodide CDN nicht erreichbar (Offline-Modus aktiv):", e); + return null; + } + } + + let activeOutputEl = null; + + function appendOutput(text, type = "stdout") { + if (!activeOutputEl) return; + const span = document.createElement("div"); + span.style.color = type === "stderr" ? "#f87171" : "#a7f3d0"; + span.textContent = text; + activeOutputEl.appendChild(span); + activeOutputEl.scrollTop = activeOutputEl.scrollHeight; + } + + window.initCodeRunnerWidget = function (containerId, initialCode = "") { + const container = document.getElementById(containerId); + if (!container) return; + + container.innerHTML = ` +
+
+

⚡ Live Python-Playground (Direkt im Browser)

+ WebAssembly Runner +
+

+ Teste deinen Code oder experimentiere mit Beispielen direkt hier im Browser – ohne Terminal! +

+ + + +
+ + +
+ +
+
Terminal-Ausgabe:
+
+
Bereit. Klicke auf '▶️ Code ausführen'...
+
+
+
+ `; + + const editor = document.getElementById(`runner-editor-${containerId}`); + const btn = document.getElementById(`runner-btn-${containerId}`); + const clearBtn = document.getElementById(`runner-clear-${containerId}`); + const output = document.getElementById(`runner-output-${containerId}`); + + clearBtn.addEventListener("click", () => { + output.innerHTML = "
Ausgabe geleert.
"; + }); + + btn.addEventListener("click", async () => { + output.innerHTML = "
⏳ Führe Code aus...
"; + activeOutputEl = output; + + const code = editor.value; + const pyodide = await getPyodide(); + + if (pyodide) { + try { + output.innerHTML = ""; + await pyodide.runPythonAsync(code); + if (output.innerHTML === "") { + output.innerHTML = "
✅ Programm fehlerfrei beendet (Keine Ausgabe).
"; + } + } catch (err) { + output.innerHTML = `
💥 Traceback:\n${err.message}
`; + } + } else { + // Fallback wenn offline ohne CDN + output.innerHTML = "
💡 Hinweis: Pyodide CDN ist offline. Bitte führe das Skript lokal im Terminal aus mit: python3 aufgabe.py!
"; + } + }); + }; + + // Automatische Initialisierung, falls Container auf der Seite vorhanden + document.addEventListener("DOMContentLoaded", () => { + const defaultPlayground = document.getElementById("python-live-playground"); + if (defaultPlayground) { + window.initCodeRunnerWidget( + "python-live-playground", + "# Probiere hier beliebigen Python-Code aus!\nprint('Hallo aus dem interaktiven Python-Lernportal! 🚀')\n\nfor i in range(1, 4):\n print(f'Schritt {i}: Python lernen macht Spaß!')" + ); + } + }); +})(); diff --git a/index.html b/index.html index 7ff0891..cacfb16 100644 --- a/index.html +++ b/index.html @@ -486,6 +486,9 @@ object has no attribute 'gang' + +
+
@@ -550,5 +553,6 @@ object has no attribute 'gang' + diff --git a/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/aufgabe.py b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/aufgabe.py index 9a2cc3a..3ba5520 100644 --- a/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/aufgabe.py +++ b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/aufgabe.py @@ -11,7 +11,7 @@ Wenn du fertig bist, überprüfe deine Lösung im Terminal mit: """ # ============================================================================== -# TODO 1: Schreibe die Funktion 'addieren(a, b)' +# 🎯 TEILZIEL 1 (TODO 1): Schreibe die Funktion 'addieren(a, b)' # # Die Funktion soll zwei Zahlen (int oder float) entgegennehmen und deren # mathematische Summe (a + b) zurückgeben. @@ -22,12 +22,13 @@ Wenn du fertig bist, überprüfe deine Lösung im Terminal mit: # ============================================================================== def addieren(a: float, b: float) -> float: - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Schreibe die Funktion 'subtrahieren(a, b)' +# 🎯 TEILZIEL 2 (TODO 2): Schreibe die Funktion 'subtrahieren(a, b)' # # Die Funktion soll die Differenz von a und b (a - b) berechnen und zurückgeben. # @@ -37,12 +38,13 @@ def addieren(a: float, b: float) -> float: # ============================================================================== def subtrahieren(a: float, b: float) -> float: - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Schreibe die Funktion 'multiplizieren(a, b)' +# 🎯 TEILZIEL 3 (TODO 3): Schreibe die Funktion 'multiplizieren(a, b)' # # Die Funktion soll das Produkt von a und b (a * b) berechnen und zurückgeben. # @@ -52,12 +54,13 @@ def subtrahieren(a: float, b: float) -> float: # ============================================================================== def multiplizieren(a: float, b: float) -> float: - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Schreibe die Funktion 'dividieren(a, b)' +# 🎯 TEILZIEL 4 (TODO 4): Schreibe die Funktion 'dividieren(a, b)' # # Die Funktion soll den Quotienten von a und b (a / b) berechnen und zurückgeben. # Hinweis: Die Division '/' in Python liefert immer eine Kommazahl (float). @@ -68,12 +71,13 @@ def multiplizieren(a: float, b: float) -> float: # ============================================================================== def dividieren(a: float, b: float) -> float: - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 5: Schreibe die Funktion 'ganzzahl_rest(a, b)' +# 🎯 TEILZIEL 5 (TODO 5): Schreibe die Funktion 'ganzzahl_rest(a, b)' # # Die Funktion soll zwei ganze Zahlen a und b annehmen und ein Tupel mit zwei # Werten zurückgeben: (quotient, rest) @@ -86,12 +90,13 @@ def dividieren(a: float, b: float) -> float: # ============================================================================== def ganzzahl_rest(a: int, b: int) -> tuple: - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 6: Schreibe die Funktion 'potenz(basis, exponent)' +# 🎯 TEILZIEL 6 (TODO 6): Schreibe die Funktion 'potenz(basis, exponent)' # # Die Funktion soll 'basis' hoch 'exponent' berechnen (mit dem Operator '**'). # @@ -102,12 +107,13 @@ def ganzzahl_rest(a: int, b: int) -> tuple: # ============================================================================== def potenz(basis: float, exponent: float) -> float: - # Schreibe hier deinen Code für TODO 6: + # 🎯 TEILZIEL 6: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 7: Schreibe die Funktion 'kreis_flaeche(radius)' +# 🎯 TEILZIEL 7 (TODO 7): Schreibe die Funktion 'kreis_flaeche(radius)' # # Berechne die Fläche eines Kreises mit der Formel: # flaeche = pi * r^2 @@ -120,7 +126,8 @@ def potenz(basis: float, exponent: float) -> float: # ============================================================================== def kreis_flaeche(radius: float) -> float: - # Schreibe hier deinen Code für TODO 7: + # 🎯 TEILZIEL 7: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/02_variablen_und_datentypen/aufgabe.py b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/aufgabe.py index 1eee5a2..2c41192 100644 --- a/lehrpfad_1_grundlagen/02_variablen_und_datentypen/aufgabe.py +++ b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/aufgabe.py @@ -12,7 +12,7 @@ Wenn du fertig bist, überprüfe deine Lösung im Terminal mit: """ # ============================================================================== -# TODO 1: Schreibe die Funktion 'bestimme_typ_name(wert)' +# 🎯 TEILZIEL 1 (TODO 1): Schreibe die Funktion 'bestimme_typ_name(wert)' # # Die Funktion bekommt einen beliebigen Wert übergeben und soll als String # den deutschen Namen des Datentyps zurückgeben: @@ -34,12 +34,13 @@ Wenn du fertig bist, überprüfe deine Lösung im Terminal mit: # ============================================================================== def bestimme_typ_name(wert) -> str: - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Schreibe die Funktion 'summe_aus_texten(text_a, text_b)' +# 🎯 TEILZIEL 2 (TODO 2): Schreibe die Funktion 'summe_aus_texten(text_a, text_b)' # # Oft kommen Benutzereingaben (z.B. von input()) als Text (str) an. # Wenn man "10" + "20" rechnet, entsteht fälschlicherweise "1020" (Textverkettung). @@ -54,12 +55,13 @@ def bestimme_typ_name(wert) -> str: # ============================================================================== def summe_aus_texten(text_a: str, text_b: str) -> int: - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Schreibe die Funktion 'formatiere_preis(preis_float)' +# 🎯 TEILZIEL 3 (TODO 3): Schreibe die Funktion 'formatiere_preis(preis_float)' # # Die Funktion bekommt einen Preis als float (Kommazahl) übergeben und soll # einen formatierten String mit genau 2 Nachkommastellen und dem Euro-Zeichen '€' @@ -74,12 +76,13 @@ def summe_aus_texten(text_a: str, text_b: str) -> int: # ============================================================================== def formatiere_preis(preis_float: float) -> str: - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Schreibe die Funktion 'ist_volljaehrig(alter)' +# 🎯 TEILZIEL 4 (TODO 4): Schreibe die Funktion 'ist_volljaehrig(alter)' # # Die Funktion bekommt ein Alter als Ganzzahl übergeben. # Sie soll 'True' zurückgeben, wenn 'alter' größer oder gleich 18 ist, @@ -95,7 +98,8 @@ def formatiere_preis(preis_float: float) -> str: # ============================================================================== def ist_volljaehrig(alter: int) -> bool: - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py index af229af..fbfbe2a 100644 --- a/lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py +++ b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py @@ -15,7 +15,7 @@ Führe danach die Tests aus mit: """ # ============================================================================== -# TODO 1: Begrüßungstext mit f-String +# 🎯 TEILZIEL 1 (TODO 1): Begrüßungstext mit f-String # # Schreibe eine Funktion 'begruessungs_text(name: str, stadt: str) -> str'. # Sie soll folgenden Text zurückgeben: @@ -26,12 +26,13 @@ Führe danach die Tests aus mit: # ============================================================================== def begruessungs_text(name: str, stadt: str) -> str: - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Alter in Tagen berechnen +# 🎯 TEILZIEL 2 (TODO 2): Alter in Tagen berechnen # # Schreibe eine Funktion 'berechne_alter_in_tagen(jahre: int) -> int'. # Sie erhält das Alter in ganzen Jahren (z.B. 18) und soll das Alter in Tagen @@ -43,12 +44,13 @@ def begruessungs_text(name: str, stadt: str) -> str: # ============================================================================== def berechne_alter_in_tagen(jahre: int) -> int: - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Rechnungsposten formatieren +# 🎯 TEILZIEL 3 (TODO 3): Rechnungsposten formatieren # # Schreibe eine Funktion 'formatiere_rechnungsposten(artikel: str, anzahl: int, einzelpreis: float) -> str'. # Sie berechnet den Gesamtpreis (anzahl * einzelpreis) und gibt einen formatierten @@ -66,12 +68,13 @@ def berechne_alter_in_tagen(jahre: int) -> int: # ============================================================================== def formatiere_rechnungsposten(artikel: str, anzahl: int, einzelpreis: float) -> str: - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Steckbrief mit BMI-Berechnung +# 🎯 TEILZIEL 4 (TODO 4): Steckbrief mit BMI-Berechnung # # Schreibe eine Funktion 'steckbrief(name: str, groesse_m: float, gewicht_kg: float) -> str'. # 1. Berechne den BMI (Body-Mass-Index) nach der Formel: @@ -90,7 +93,8 @@ def formatiere_rechnungsposten(artikel: str, anzahl: int, einzelpreis: float) -> # ============================================================================== def steckbrief(name: str, groesse_m: float, gewicht_kg: float) -> str: - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/aufgabe.py b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/aufgabe.py index 013d79d..ef4137f 100644 --- a/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/aufgabe.py +++ b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/aufgabe.py @@ -15,7 +15,7 @@ Führe danach die Tests aus mit: """ # ============================================================================== -# TODO 1: Kinokarten-Preisrechner +# 🎯 TEILZIEL 1 (TODO 1): Kinokarten-Preisrechner # # Schreibe eine Funktion 'ticket_preis(alter: int, ist_student: bool) -> float'. # Sie berechnet den Ticketpreis nach folgenden Tarif-Regeln: @@ -33,12 +33,13 @@ Führe danach die Tests aus mit: # ============================================================================== def ticket_preis(alter: int, ist_student: bool) -> float: - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Schulnoten-Ermittlung +# 🎯 TEILZIEL 2 (TODO 2): Schulnoten-Ermittlung # # Schreibe eine Funktion 'schulnote_text(punkte: int) -> str'. # Sie ordnet einer erreichten Punktezahl (0 bis 100) die passende Textnote zu: @@ -58,12 +59,13 @@ def ticket_preis(alter: int, ist_student: bool) -> float: # ============================================================================== def schulnote_text(punkte: int) -> str: - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Schaltjahr-Erkennung +# 🎯 TEILZIEL 3 (TODO 3): Schaltjahr-Erkennung # # Schreibe eine Funktion 'ist_schaltjahr(jahr: int) -> bool'. # Die Funktion soll prüfen, ob ein übergebenes Kalenderjahr ein Schaltjahr ist. @@ -81,12 +83,13 @@ def schulnote_text(punkte: int) -> str: # ============================================================================== def ist_schaltjahr(jahr: int) -> bool: - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Achterbahn-Zulassung +# 🎯 TEILZIEL 4 (TODO 4): Achterbahn-Zulassung # # Schreibe eine Funktion 'kann_achterbahn_fahren(groesse_cm: int, begleitung_erwachsen: bool) -> bool'. # Ein Freizeitpark hat folgende Sicherheitsbestimmungen: @@ -103,7 +106,8 @@ def ist_schaltjahr(jahr: int) -> bool: # ============================================================================== def kann_achterbahn_fahren(groesse_cm: int, begleitung_erwachsen: bool) -> bool: - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/aufgabe.py b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/aufgabe.py index c3a1a8d..7388249 100644 --- a/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/aufgabe.py +++ b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/aufgabe.py @@ -16,7 +16,7 @@ Teste deine Lösungen jederzeit im Terminal mit: # ============================================================================== -# TODO 1: Schreibe die Funktion "summe_bis(n: int) -> int". +# 🎯 TEILZIEL 1 (TODO 1): Schreibe die Funktion "summe_bis(n: int) -> int". # # Beschreibung: # Berechnet die Summe aller ganzen Zahlen von 1 bis n (inklusive). @@ -29,12 +29,13 @@ Teste deine Lösungen jederzeit im Terminal mit: def summe_bis(n: int) -> int: """Berechnet 1 + 2 + ... + n.""" - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Schreibe die Funktion "fakultaet(n: int) -> int". +# 🎯 TEILZIEL 2 (TODO 2): Schreibe die Funktion "fakultaet(n: int) -> int". # # Beschreibung: # Die Fakultät n! ist das Produkt aller ganzen Zahlen von 1 bis n. @@ -50,12 +51,13 @@ def summe_bis(n: int) -> int: def fakultaet(n: int) -> int: """Berechnet n! (Fakultät von n).""" - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Schreibe die Funktion "zaehle_gerade_zahlen(start: int, ende: int) -> int". +# 🎯 TEILZIEL 3 (TODO 3): Schreibe die Funktion "zaehle_gerade_zahlen(start: int, ende: int) -> int". # # Beschreibung: # Zählt, wie viele gerade Zahlen im Intervall von start bis ende (beide inklusive!) @@ -74,12 +76,13 @@ def fakultaet(n: int) -> int: def zaehle_gerade_zahlen(start: int, ende: int) -> int: """Zählt alle geraden Zahlen im Bereich [start, ende].""" - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Schreibe die Funktion "ist_primzahl(n: int) -> bool". +# 🎯 TEILZIEL 4 (TODO 4): Schreibe die Funktion "ist_primzahl(n: int) -> bool". # # Beschreibung: # Eine Primzahl ist eine ganze Zahl größer als 1, die nur durch 1 und sich selbst @@ -97,12 +100,13 @@ def zaehle_gerade_zahlen(start: int, ende: int) -> int: def ist_primzahl(n: int) -> bool: """Prüft, ob n eine Primzahl ist.""" - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 5: Schreibe die Funktion "quorsumme(n: int) -> int". +# 🎯 TEILZIEL 5 (TODO 5): Schreibe die Funktion "quorsumme(n: int) -> int". # # Beschreibung: # Berechnet die Quersumme einer Zahl n mittels einer WHILE-Schleife. @@ -125,7 +129,8 @@ def ist_primzahl(n: int) -> bool: def quorsumme(n: int) -> int: """Berechnet die Quersumme von n mittels einer while-Schleife.""" - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/06_funktionen_und_module/aufgabe.py b/lehrpfad_1_grundlagen/06_funktionen_und_module/aufgabe.py index 46adefd..fc18a1c 100644 --- a/lehrpfad_1_grundlagen/06_funktionen_und_module/aufgabe.py +++ b/lehrpfad_1_grundlagen/06_funktionen_und_module/aufgabe.py @@ -24,7 +24,7 @@ import random # ============================================================================== -# TODO 1: Schreibe die Funktion "hypotenuse(a: float, b: float) -> float". +# 🎯 TEILZIEL 1 (TODO 1): Schreibe die Funktion "hypotenuse(a: float, b: float) -> float". # # Beschreibung: # Berechnet die Länge der Hypotenuse c eines rechtwinkligen Dreiecks nach dem @@ -39,12 +39,13 @@ import random def hypotenuse(a: float, b: float) -> float: """Berechnet die Hypotenuse c = sqrt(a^2 + b^2).""" - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Schreibe die Funktion "zylinder_volumen(radius: float, hoehe: float) -> float". +# 🎯 TEILZIEL 2 (TODO 2): Schreibe die Funktion "zylinder_volumen(radius: float, hoehe: float) -> float". # # Beschreibung: # Berechnet das Volumen eines Zylinders: V = pi * r² * h. @@ -58,12 +59,13 @@ def hypotenuse(a: float, b: float) -> float: def zylinder_volumen(radius: float, hoehe: float) -> float: """Berechnet das Volumen eines Zylinders: V = pi * r^2 * h.""" - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Schreibe die Funktion "wuerfle_wuerfel(anzahl: int, seiten: int = 6) -> list[int]". +# 🎯 TEILZIEL 3 (TODO 3): Schreibe die Funktion "wuerfle_wuerfel(anzahl: int, seiten: int = 6) -> list[int]". # # Beschreibung: # Simuliert das Würfeln von 'anzahl' Würfeln mit jeweils 'seiten' Seiten. @@ -80,12 +82,13 @@ def zylinder_volumen(radius: float, hoehe: float) -> float: def wuerfle_wuerfel(anzahl: int, seiten: int = 6) -> list[int]: """Würfelt 'anzahl' Würfel mit je 'seiten' Seiten (Standard: 6-seitig).""" - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Schreibe die Funktion "statistik(zahlen: list[float]) -> tuple[float, float, float]". +# 🎯 TEILZIEL 4 (TODO 4): Schreibe die Funktion "statistik(zahlen: list[float]) -> tuple[float, float, float]". # # Beschreibung: # Berechnet das Minimum, das Maximum und den arithmetischen Mittelwert (Durchschnitt) @@ -104,7 +107,8 @@ def wuerfle_wuerfel(anzahl: int, seiten: int = 6) -> list[int]: def statistik(zahlen: list[float]) -> tuple[float, float, float]: """Gibt (min_wert, max_wert, mittelwert) einer Zahlenliste zurück.""" - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/07_listen_und_sequenzen/aufgabe.py b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/aufgabe.py index a2fe04b..61cbbc5 100644 --- a/lehrpfad_1_grundlagen/07_listen_und_sequenzen/aufgabe.py +++ b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/aufgabe.py @@ -20,7 +20,8 @@ def liste_umdrehen(liste: list) -> list: Verwende Slicing mit Schrittweite -1: `liste[::-1]` oder erstelle eine Kopie und wende `.reverse()` an. """ - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -36,7 +37,8 @@ def filtere_positive_zahlen(zahlen: list[float]) -> list[float]: Erstelle eine leere Ergebnisliste `positiv = []` und iteriere mit einer for-Schleife über alle Zahlen. Wenn `z > 0`, füge sie mit `.append(z)` hinzu. """ - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -56,7 +58,8 @@ def entferne_element(liste: list, element) -> bool: Tipp: Prüfe zuerst mit `if element in liste:`, bevor du `liste.remove(element)` aufrufst. """ - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -75,7 +78,8 @@ def mittlere_elemente(liste: list) -> list: Tipp: Nutze Slicing: `liste[1:-1]`. Wenn `len(liste) <= 2`, gib `[]` zurück. """ - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -100,7 +104,8 @@ def noten_durchschnitt_ohne_ausreisser(noten: list[float]) -> float: 4. Entferne je ein Exemplar mit `kopie.remove(...)`. 5. Berechne den Schnitt mit `sum(kopie) / len(kopie)` und gib ihn zurück. """ - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/aufgabe.py b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/aufgabe.py index 3b808ee..f483cb9 100644 --- a/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/aufgabe.py +++ b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/aufgabe.py @@ -27,7 +27,8 @@ def ist_palindrom(text: str) -> bool: 2. Entferne Leerzeichen mit `.replace(" ", "")`. 3. Vergleiche den bereinigten Text mit seiner Umkehrung: `bereinigt == bereinigt[::-1]`. """ - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -48,7 +49,8 @@ def zaehle_vokale(text: str) -> int: Wandle den Text in Kleinbuchstaben um (`text.lower()`) und zähle, wie viele Zeichen in `vokale` vorkommen. """ - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -69,7 +71,8 @@ def bereinige_benutzernamen(name: str) -> str: Tipp: Du kannst String-Methoden verketten: `name.strip().lower().replace(" ", "_")` """ - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -88,7 +91,8 @@ def woerter_zaehlen(text: str) -> int: Verwende `.split()`. Ohne Parameter teilt es an beliebigen Leerzeichen und ignoriert doppelte Leerzeichen automatisch! `len(text.split())` """ - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass @@ -113,7 +117,8 @@ def maskiere_kreditkarte(nummer: str) -> str: 3. Die letzten 4 Zeichen: `letzte_vier = nummer[-4:]` 4. Gib `("*" * anzahl_sterne) + letzte_vier` zurück. """ - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py index 247ae74..2e0e3b0 100644 --- a/lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py +++ b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py @@ -16,7 +16,7 @@ from typing import List, Dict, Set # ============================================================================== -# TODO 1: Wörter-Häufigkeitszähler +# 🎯 TEILZIEL 1 (TODO 1): Wörter-Häufigkeitszähler # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'woerter_haeufigkeit(text: str) -> dict[str, int]'. # @@ -34,12 +34,13 @@ from typing import List, Dict, Set def woerter_haeufigkeit(text: str) -> Dict[str, int]: """Zählt die Häufigkeit aller Wörter in einem gegebenen Text (case-insensitive).""" - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Telefonbuch-Suche mit .get() +# 🎯 TEILZIEL 2 (TODO 2): Telefonbuch-Suche mit .get() # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'telefonbuch_suche(telefonbuch: dict[str, str], name: str) -> str'. # @@ -58,12 +59,13 @@ def woerter_haeufigkeit(text: str) -> Dict[str, int]: def telefonbuch_suche(telefonbuch: Dict[str, str], name: str) -> str: """Sucht eine Telefonnummer im Telefonbuch mit sicherer .get() Abfrage.""" - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Gemeinsame Interessen (Mengenoperation Schnittmenge) +# 🎯 TEILZIEL 3 (TODO 3): Gemeinsame Interessen (Mengenoperation Schnittmenge) # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'gemeinsame_interessen(person_a_hobbys: set, person_b_hobbys: set) -> set'. # @@ -81,12 +83,13 @@ def telefonbuch_suche(telefonbuch: Dict[str, str], name: str) -> str: def gemeinsame_interessen(person_a_hobbys: Set[str], person_b_hobbys: Set[str]) -> Set[str]: """Ermittelt die Schnittmenge der Hobbys zweier Personen.""" - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Duplikate entfernen & Reihenfolge beibehalten +# 🎯 TEILZIEL 4 (TODO 4): Duplikate entfernen & Reihenfolge beibehalten # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'entferne_duplikate_behalte_reihenfolge(liste: list) -> list'. # @@ -105,7 +108,8 @@ def gemeinsame_interessen(person_a_hobbys: Set[str], person_b_hobbys: Set[str]) def entferne_duplikate_behalte_reihenfolge(liste: list) -> list: """Entfernt Duplikate aus einer Liste unter Beibehaltung der Reihenfolge.""" - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/aufgabe.py b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/aufgabe.py index 7e47a16..a946934 100644 --- a/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/aufgabe.py +++ b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/aufgabe.py @@ -18,7 +18,7 @@ from typing import List, Dict, Union # ============================================================================== -# TODO 1: Quadratzahlen gerader Zahlen (List Comprehension) +# 🎯 TEILZIEL 1 (TODO 1): Quadratzahlen gerader Zahlen (List Comprehension) # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'quadratzahlen_gerade(zahlen: list[int]) -> list[int]'. # @@ -35,12 +35,13 @@ from typing import List, Dict, Union def quadratzahlen_gerade(zahlen: List[int]) -> List[int]: """Gibt die Quadrate aller geraden Zahlen als List Comprehension zurück.""" - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 2: Wörter nach Mindestlänge filtern +# 🎯 TEILZIEL 2 (TODO 2): Wörter nach Mindestlänge filtern # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'filtriere_lange_woerter(woerter: list[str], min_laenge: int) -> list[str]'. # @@ -56,12 +57,13 @@ def quadratzahlen_gerade(zahlen: List[int]) -> List[int]: def filtriere_lange_woerter(woerter: List[str], min_laenge: int) -> List[str]: """Filtert alle Wörter heraus, die mindestens 'min_laenge' Zeichen lang sind.""" - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Tage bis Zieldatum berechnen (datetime & timedelta) +# 🎯 TEILZIEL 3 (TODO 3): Tage bis Zieldatum berechnen (datetime & timedelta) # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'tage_bis_datum(ziel_datum_str: str) -> int'. # @@ -76,12 +78,13 @@ def filtriere_lange_woerter(woerter: List[str], min_laenge: int) -> List[str]: def tage_bis_datum(ziel_datum_str: str) -> int: """Berechnet die Anzahl der Tage von heute bis zum angegebenen Zieldatum (YYYY-MM-DD).""" - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Datum im deutschen Format darstellen (.strftime) +# 🎯 TEILZIEL 4 (TODO 4): Datum im deutschen Format darstellen (.strftime) # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'formatiere_deutsches_datum(datum_obj: Union[date, datetime]) -> str'. # @@ -94,12 +97,13 @@ def tage_bis_datum(ziel_datum_str: str) -> int: def formatiere_deutsches_datum(datum_obj: Union[date, datetime]) -> str: """Formatiert ein date- oder datetime-Objekt in das deutsche Format DD.MM.YYYY.""" - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 5: Älteste Person finden (Algorithmus: Maximum / Key-Suche) +# 🎯 TEILZIEL 5 (TODO 5): Älteste Person finden (Algorithmus: Maximum / Key-Suche) # ------------------------------------------------------------------------------ # Schreibe eine Funktion 'finde_aelteste_person(personen: list[dict]) -> str'. # @@ -113,7 +117,8 @@ def formatiere_deutsches_datum(datum_obj: Union[date, datetime]) -> str: def finde_aelteste_person(personen: List[Dict[str, Union[str, int]]]) -> str: """Findet in einer Liste von Personen-Dicts die älteste Person und gibt deren Namen zurück.""" - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_2_oop_einstieg/01_einstieg_klassen/aufgabe.py b/lehrpfad_2_oop_einstieg/01_einstieg_klassen/aufgabe.py index e9b7dd9..aeebafe 100644 --- a/lehrpfad_2_oop_einstieg/01_einstieg_klassen/aufgabe.py +++ b/lehrpfad_2_oop_einstieg/01_einstieg_klassen/aufgabe.py @@ -8,19 +8,20 @@ Wenn du fertig bist, überprüfe deine Lösung im Terminal mit: """ # ============================================================================== -# TODO 1: Definiere eine leere Klasse namens "Haustier". +# 🎯 TEILZIEL 1 (TODO 1): Definiere eine leere Klasse namens "Haustier". # # Erklärung: # Eine Klasse ist ein Bauplan. # Schreibe 'class Haustier:' und rück in der nächsten Zeile 'pass' ein. # ============================================================================== -# Schreibe hier deinen Code für TODO 1: +# 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! # ============================================================================== -# TODO 2: Erstelle eine Funktion namens "erstelle_bello()". +# 🎯 TEILZIEL 2 (TODO 2): Erstelle eine Funktion namens "erstelle_bello()". # # Schritt-für-Schritt-Anleitung: # 1. Erstelle ein neues Haustier-Objekt: z.B. hund = Haustier() @@ -32,12 +33,13 @@ Wenn du fertig bist, überprüfe deine Lösung im Terminal mit: # ============================================================================== def erstelle_bello(): - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 3: Erstelle eine Funktion namens "erstelle_mimi()". +# 🎯 TEILZIEL 3 (TODO 3): Erstelle eine Funktion namens "erstelle_mimi()". # # Ähnlich wie bei Bello: # - name = "Mimi" @@ -47,12 +49,13 @@ def erstelle_bello(): # ============================================================================== def erstelle_mimi(): - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 4: Schreibe eine Funktion "steckbrief_text(haustier)". +# 🎯 TEILZIEL 4 (TODO 4): Schreibe eine Funktion "steckbrief_text(haustier)". # # Die Funktion bekommt ein Haustier-Objekt als Parameter übergeben. # Sie soll einen formatierten Text im folgenden Format zurückgeben: @@ -65,12 +68,13 @@ def erstelle_mimi(): # ============================================================================== def steckbrief_text(haustier): - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ============================================================================== -# TODO 5: Schreibe eine Funktion "aelteres_tier(tier1, tier2)". +# 🎯 TEILZIEL 5 (TODO 5): Schreibe eine Funktion "aelteres_tier(tier1, tier2)". # # Die Funktion bekommt zwei Haustier-Objekte übergeben. # Sie soll dasjenige Haustier-Objekt zurückgeben, dessen 'alter' größer ist. @@ -84,7 +88,8 @@ def steckbrief_text(haustier): # ============================================================================== def aelteres_tier(tier1, tier2): - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_2_oop_einstieg/02_init_und_self/aufgabe.py b/lehrpfad_2_oop_einstieg/02_init_und_self/aufgabe.py index 3082ba7..5941133 100644 --- a/lehrpfad_2_oop_einstieg/02_init_und_self/aufgabe.py +++ b/lehrpfad_2_oop_einstieg/02_init_und_self/aufgabe.py @@ -7,7 +7,7 @@ In dieser Aufgabe erstellst du eine Klasse "Bankkonto" für eine Taschengeld-App class Bankkonto: # ========================================================================== - # TODO 1: Schreibe die __init__-Methode. + # 🎯 TEILZIEL 1 (TODO 1): Schreibe die __init__-Methode. # Parameter: self, inhaber (String), kontostand (Float, Standardwert 0.0) # # Anleitung: @@ -17,11 +17,12 @@ class Bankkonto: # self.kontostand = kontostand # ========================================================================== def __init__(self, inhaber, kontostand=0.0): - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 2: Schreibe die Methode "einzahlen(self, betrag)". + # 🎯 TEILZIEL 2 (TODO 2): Schreibe die Methode "einzahlen(self, betrag)". # # Regeln: # 1. Wenn 'betrag' größer als 0 ist: @@ -32,11 +33,12 @@ class Bankkonto: # - Gib False zurück. # ========================================================================== def einzahlen(self, betrag): - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 3: Schreibe die Methode "auszahlen(self, betrag)". + # 🎯 TEILZIEL 3 (TODO 3): Schreibe die Methode "auszahlen(self, betrag)". # # Regeln: # 1. Prüfe mit 'if', ob 'betrag > 0' UND 'self.kontostand >= betrag': @@ -46,11 +48,12 @@ class Bankkonto: # - Gib False zurück. # ========================================================================== def auszahlen(self, betrag): - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 4: Schreibe die Methode "info_text(self)". + # 🎯 TEILZIEL 4 (TODO 4): Schreibe die Methode "info_text(self)". # # Sie soll einen formatierten String zurückgeben: # "Konto von {inhaber}: {kontostand:.2f} Euro" @@ -59,7 +62,8 @@ class Bankkonto: # Tipp: f"Konto von {self.inhaber}: {self.kontostand:.2f} Euro" # ========================================================================== def info_text(self): - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/aufgabe.py b/lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/aufgabe.py index 2060b3f..a4ed53f 100644 --- a/lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/aufgabe.py +++ b/lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/aufgabe.py @@ -7,7 +7,7 @@ In dieser Aufgabe programmierst du eine Klasse 'Held' für ein Rollenspiel. class Held: # ========================================================================== - # TODO 1: Konstruktor __init__(self, name, leben=100, angriffskraft=15) + # 🎯 TEILZIEL 1 (TODO 1): Konstruktor __init__(self, name, leben=100, angriffskraft=15) # # Speichere die folgenden Attribute an self: # - self.name = name @@ -17,11 +17,12 @@ class Held: # - self.ist_am_leben = True # ========================================================================== def __init__(self, name, leben=100, angriffskraft=15): - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 2: Methode "schaden_erleiden(self, schaden)" + # 🎯 TEILZIEL 2 (TODO 2): Methode "schaden_erleiden(self, schaden)" # # Schritt-für-Schritt: # 1. Wenn der Held schon tot ist (not self.ist_am_leben) oder schaden <= 0: @@ -33,11 +34,12 @@ class Held: # 4. Gib den erlittenen Schaden zurück (z.B. return schaden). # ========================================================================== def schaden_erleiden(self, schaden): - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 3: Methode "heilen(self, heilung)" + # 🎯 TEILZIEL 3 (TODO 3): Methode "heilen(self, heilung)" # # Schritt-für-Schritt: # 1. Wenn der Held tot ist (not self.ist_am_leben) oder heilung <= 0: @@ -50,11 +52,12 @@ class Held: # 5. Gib tatsaechlich_geheilt zurück. # ========================================================================== def heilen(self, heilung): - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 4: Methode "angreifen(self, gegner)" + # 🎯 TEILZIEL 4 (TODO 4): Methode "angreifen(self, gegner)" # Parameter 'gegner' ist ein anderes Held-Objekt! # # Schritt-für-Schritt: @@ -67,11 +70,12 @@ class Held: # - Gib False zurück. # ========================================================================== def angreifen(self, gegner): - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 5: Methode "status_text(self)" + # 🎯 TEILZIEL 5 (TODO 5): Methode "status_text(self)" # # Gibt einen formatierten String zurück: # Wenn am Leben: @@ -80,7 +84,8 @@ class Held: # "[{self.name}] HP: 0/{self.max_leben} | Kraft: {self.angriffskraft} | Status: Besiegt" # ========================================================================== def status_text(self): - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_2_oop_einstieg/04_str_und_darstellung/aufgabe.py b/lehrpfad_2_oop_einstieg/04_str_und_darstellung/aufgabe.py index 24e767f..06603cd 100644 --- a/lehrpfad_2_oop_einstieg/04_str_und_darstellung/aufgabe.py +++ b/lehrpfad_2_oop_einstieg/04_str_und_darstellung/aufgabe.py @@ -7,26 +7,28 @@ In dieser Aufgabe erstellst du zwei Klassen: 'Artikel' und 'Warenkorb'. class Artikel: # ========================================================================== - # TODO 1: Konstruktor für Artikel + # 🎯 TEILZIEL 1 (TODO 1): Konstruktor für Artikel # Parameter: self, name (str), preis (float), anzahl (int, Standardwert 1) # Speichere: self.name, self.preis, self.anzahl # ========================================================================== def __init__(self, name, preis, anzahl=1): - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 2: Methode "gesamtpreis(self)" + # 🎯 TEILZIEL 2 (TODO 2): Methode "gesamtpreis(self)" # Gibt den Preis für diesen Artikel multipliziert mit der Anzahl zurück. # Beispiel: 3 Äpfel à 0.50€ -> 1.50 # Tipp: return self.preis * self.anzahl # ========================================================================== def gesamtpreis(self): - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 3: Dunder-Methode "__str__(self)" + # 🎯 TEILZIEL 3 (TODO 3): Dunder-Methode "__str__(self)" # Gibt einen formatierten String zurück: # "{anzahl}x {name} (je {preis:.2f} €) = {gesamtpreis:.2f} €" # @@ -34,30 +36,33 @@ class Artikel: # -> "2x Milch (je 1.29 €) = 2.58 €" # ========================================================================== def __str__(self): - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass class Warenkorb: # ========================================================================== - # TODO 4: Konstruktor für Warenkorb + # 🎯 TEILZIEL 4 (TODO 4): Konstruktor für Warenkorb # Parameter: self # Initialisiere: self.artikel_liste als leere Liste [] # ========================================================================== def __init__(self): - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 5: Methode "artikel_hinzufuegen(self, artikel)" + # 🎯 TEILZIEL 5 (TODO 5): Methode "artikel_hinzufuegen(self, artikel)" # Hängt das übergebene Artikel-Objekt an 'self.artikel_liste' an (.append). # ========================================================================== def artikel_hinzufuegen(self, artikel): - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 6: Methode "gesamtsumme(self)" + # 🎯 TEILZIEL 6 (TODO 6): Methode "gesamtsumme(self)" # Berechnet die Summe der Gesamtpreise aller Artikel in self.artikel_liste # und gibt diese als float zurück. # @@ -68,11 +73,12 @@ class Warenkorb: # return total # ========================================================================== def gesamtsumme(self): - # Schreibe hier deinen Code für TODO 6: + # 🎯 TEILZIEL 6: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 7: Methode "bon_text(self)" + # 🎯 TEILZIEL 7 (TODO 7): Methode "bon_text(self)" # Erzeugt einen formatierten mehrzeiligen String für den Kassenzettel. # Format: # --- KASSENZETTEL --- @@ -84,7 +90,8 @@ class Warenkorb: # Tipp: Baue eine Liste von Zeilen und verbinde sie am Ende mit "\n".join(...) # ========================================================================== def bon_text(self): - # Schreibe hier deinen Code für TODO 7: + # 🎯 TEILZIEL 7: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_2_oop_einstieg/05_objekte_kombinieren/aufgabe.py b/lehrpfad_2_oop_einstieg/05_objekte_kombinieren/aufgabe.py index 6888c38..07d4c6b 100644 --- a/lehrpfad_2_oop_einstieg/05_objekte_kombinieren/aufgabe.py +++ b/lehrpfad_2_oop_einstieg/05_objekte_kombinieren/aufgabe.py @@ -8,16 +8,17 @@ In dieser Aufgabe baust du eine Musikverwaltung mit zwei Klassen: class Song: # ========================================================================== - # TODO 1: Konstruktor für Song + # 🎯 TEILZIEL 1 (TODO 1): Konstruktor für Song # Parameter: self, titel (str), kuenstler (str), dauer_sekunden (int) # Speichere: self.titel, self.kuenstler, self.dauer_sekunden # ========================================================================== def __init__(self, titel, kuenstler, dauer_sekunden): - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 2: Methode "formatierte_dauer(self)" + # 🎯 TEILZIEL 2 (TODO 2): Methode "formatierte_dauer(self)" # Rechnet 'self.dauer_sekunden' in Minuten und Sekunden um und gibt einen # String im Format "MM:SS" zurück (z.B. 215 -> "03:35", 70 -> "01:10"). # @@ -27,49 +28,54 @@ class Song: # return f"{minuten:02d}:{sekunden:02d}" # ========================================================================== def formatierte_dauer(self): - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 3: Dunder-Methode "__str__(self)" + # 🎯 TEILZIEL 3 (TODO 3): Dunder-Methode "__str__(self)" # Gibt einen String im Format zurück: # '"{titel}" von {kuenstler} ({formatierte_dauer})' # # Beispiel: '"Flowers" von Miley Cyrus (03:20)' # ========================================================================== def __str__(self): - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass class Playlist: # ========================================================================== - # TODO 4: Konstruktor für Playlist + # 🎯 TEILZIEL 4 (TODO 4): Konstruktor für Playlist # Parameter: self, name (str) # Speichere: self.name, self.songs (als leere Liste []) # ========================================================================== def __init__(self, name): - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 5: Methode "song_hinzufuegen(self, song)" + # 🎯 TEILZIEL 5 (TODO 5): Methode "song_hinzufuegen(self, song)" # Hängt das übergebene Song-Objekt an 'self.songs' an (.append). # ========================================================================== def song_hinzufuegen(self, song): - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 6: Methode "anzahl_songs(self)" + # 🎯 TEILZIEL 6 (TODO 6): Methode "anzahl_songs(self)" # Gibt die Anzahl der Songs in der Playlist als Integer zurück (len(self.songs)). # ========================================================================== def anzahl_songs(self): - # Schreibe hier deinen Code für TODO 6: + # 🎯 TEILZIEL 6: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 7: Methode "gesamtdauer_sekunden(self)" + # 🎯 TEILZIEL 7 (TODO 7): Methode "gesamtdauer_sekunden(self)" # Gibt die Summe der Sekunden aller Songs in der Playlist zurück. # Bei leerer Playlist: 0 # @@ -80,27 +86,30 @@ class Playlist: # return total # ========================================================================== def gesamtdauer_sekunden(self): - # Schreibe hier deinen Code für TODO 7: + # 🎯 TEILZIEL 7: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 8: Methode "finde_songs_von(self, kuenstler)" + # 🎯 TEILZIEL 8 (TODO 8): Methode "finde_songs_von(self, kuenstler)" # Sucht alle Songs in self.songs, bei denen der Künstler übereinstimmt. # Wichtig: Groß- und Kleinschreibung soll ignoriert werden! (z.B. .lower()) # Gibt eine Liste von passenden Song-Objekten zurück. # ========================================================================== def finde_songs_von(self, kuenstler): - # Schreibe hier deinen Code für TODO 8: + # 🎯 TEILZIEL 8: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 9: Methode "laengster_song(self)" + # 🎯 TEILZIEL 9 (TODO 9): Methode "laengster_song(self)" # Findet den Song mit der längsten Spieldauer in self.songs. # - Gibt das gefundene Song-Objekt zurück. # - Gibt None zurück, wenn die Playlist leer ist. # ========================================================================== def laengster_song(self): - # Schreibe hier deinen Code für TODO 9: + # 🎯 TEILZIEL 9: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/aufgabe.py b/lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/aufgabe.py index 9e20e16..b2a14cf 100644 --- a/lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/aufgabe.py +++ b/lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/aufgabe.py @@ -7,7 +7,7 @@ Programmiere hier die Klasse 'Tamagotchi'. class Tamagotchi: # ========================================================================== - # TODO 1: Konstruktor __init__(self, name, tierart="Drache") + # 🎯 TEILZIEL 1 (TODO 1): Konstruktor __init__(self, name, tierart="Drache") # # Initialisiere die folgenden Attribute an self: # - self.name = name @@ -19,7 +19,8 @@ class Tamagotchi: # - self.ist_lebendig = True # ========================================================================== def __init__(self, name, tierart="Drache"): - # Schreibe hier deinen Code für TODO 1: + # 🎯 TEILZIEL 1: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # Hilfsmethode: Begrenzt Werte immer zwischen min_wert (0) und max_wert (100) @@ -27,7 +28,7 @@ class Tamagotchi: return max(min_wert, min(max_wert, wert)) # ========================================================================== - # TODO 2: Methode "fuettern(self, menge=20)" + # 🎯 TEILZIEL 2 (TODO 2): Methode "fuettern(self, menge=20)" # # Regeln: # 1. Wenn not self.ist_lebendig: @@ -39,11 +40,12 @@ class Tamagotchi: # - Gib zurück: f"{self.name} mampft genüsslich! (Hunger: {self.hunger}/100)" # ========================================================================== def fuettern(self, menge=20): - # Schreibe hier deinen Code für TODO 2: + # 🎯 TEILZIEL 2: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 3: Methode "spielen(self, spass=25)" + # 🎯 TEILZIEL 3 (TODO 3): Methode "spielen(self, spass=25)" # # Regeln: # 1. Wenn not self.ist_lebendig: @@ -58,11 +60,12 @@ class Tamagotchi: # - Gib zurück: f"{self.name} hatte riesigen Spaß beim Spielen! (Glück: {self.glueck}/100)" # ========================================================================== def spielen(self, spass=25): - # Schreibe hier deinen Code für TODO 3: + # 🎯 TEILZIEL 3: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 4: Methode "schlafen(self)" + # 🎯 TEILZIEL 4 (TODO 4): Methode "schlafen(self)" # # Regeln: # 1. Wenn not self.ist_lebendig: @@ -74,11 +77,12 @@ class Tamagotchi: # - Gib zurück: f"{self.name} hat tief geschlafen und ist ausgeruht! Ein neuer Tag bricht an." # ========================================================================== def schlafen(self): - # Schreibe hier deinen Code für TODO 4: + # 🎯 TEILZIEL 4: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 5: Methode "zeit_vergeht(self)" + # 🎯 TEILZIEL 5 (TODO 5): Methode "zeit_vergeht(self)" # Simuliert das Verstreichen von Zeit. # # Regeln: @@ -94,11 +98,12 @@ class Tamagotchi: # - Gib self.ist_lebendig zurück (True wenn noch am Leben, False wenn gestorben). # ========================================================================== def zeit_vergeht(self): - # Schreibe hier deinen Code für TODO 5: + # 🎯 TEILZIEL 5: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass # ========================================================================== - # TODO 6: Dunder-Methode "__str__(self)" + # 🎯 TEILZIEL 6 (TODO 6): Dunder-Methode "__str__(self)" # Gibt eine hübsche Statusübersicht als mehrzeiligen String zurück. # # Format (wenn lebendig): @@ -111,7 +116,8 @@ class Tamagotchi: # "=== {self.name} ({self.tierart}) - RIP 🪦 ===" # ========================================================================== def __str__(self): - # Schreibe hier deinen Code für TODO 6: + # 🎯 TEILZIEL 6: Implementiere die Logik Schritt für Schritt: + # 💡 Tipp: Beachte Datentypen und das abschließende return! pass diff --git a/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/aufgabe.py b/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/aufgabe.py index 0e05d03..14f23f8 100644 --- a/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/aufgabe.py +++ b/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/aufgabe.py @@ -10,7 +10,7 @@ from typing import Optional, List class Person: # ========================================================================== - # TODO 1: Konstruktor __init__ + # 🎯 TEILZIEL 1 (TODO 1): Konstruktor __init__ # Parameter: name (str), geburtsjahr (int) # Attribute: # - self.name: str @@ -23,7 +23,7 @@ class Person: pass # ========================================================================== - # TODO 2: Methode mutter_setzen(self, mutter: 'Person') -> None + # 🎯 TEILZIEL 2 (TODO 2): Methode mutter_setzen(self, mutter: 'Person') -> None # 1. Setze self.mutter = mutter # 2. Füge self zur Liste mutter.kinder hinzu (falls self noch nicht drin ist) # ========================================================================== @@ -31,7 +31,7 @@ class Person: pass # ========================================================================== - # TODO 3: Methode vater_setzen(self, vater: 'Person') -> None + # 🎯 TEILZIEL 3 (TODO 3): Methode vater_setzen(self, vater: 'Person') -> None # 1. Setze self.vater = vater # 2. Füge self zur Liste vater.kinder hinzu (falls self noch nicht drin ist) # ========================================================================== @@ -39,7 +39,7 @@ class Person: pass # ========================================================================== - # TODO 4: Methode geschwister(self) -> list['Person'] + # 🎯 TEILZIEL 4 (TODO 4): Methode geschwister(self) -> list['Person'] # Gibt eine Liste aller Personen zurück, die dieselbe Mutter ODER denselben # Vater haben wie self. # WICHTIG: @@ -50,7 +50,7 @@ class Person: pass # ========================================================================== - # TODO 5: Methode grosseltern(self) -> list['Person'] + # 🎯 TEILZIEL 5 (TODO 5): Methode grosseltern(self) -> list['Person'] # Gibt eine Liste aller bekannten Großeltern zurück: # (Mutter der Mutter, Vater der Mutter, Mutter des Vaters, Vater des Vaters) # Nur Großeltern hinzufügen, die nicht None sind! @@ -59,7 +59,7 @@ class Person: pass # ========================================================================== - # TODO 6: Dunder-Methode __str__(self) -> str + # 🎯 TEILZIEL 6 (TODO 6): Dunder-Methode __str__(self) -> str # Gibt einen String im Format: "Name (*Geburtsjahr)" zurück. # Beispiel: "Mia (*2008)" # ========================================================================== diff --git a/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html b/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html index 1bae18a..173621b 100644 --- a/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html +++ b/lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html @@ -54,6 +54,22 @@ print(liste_a) # Ausgabe: [1, 2, 3, 99] <-- liste_a hat sich mitverändert! + +
+
🧠 Was passiert im Computer-Speicher? (Notional Machine)
+
+STACK (Variablen-Namen)                HEAP (Echter Speicher / RAM)
+┌──────────────┐                       ┌──────────────────────────────┐
+│  liste_a ────┼──────────────────────>│  ID: 0x7ffd1a  [1, 2, 3, 99] │
+└──────────────┘                       └──────────────────────────────┘
+                                                       ▲
+┌──────────────┐                                       │
+│  liste_b ────┼───────────────────────────────────────┘
+└──────────────┘
+(Beide Variablen zeigen auf denselben Pfeil im Heap!)
+        
+
+
⚠️ Vorsicht bei veränderlichen Objekten (Mutable vs. Immutable):