Restrukturiere Verzeichnisstruktur in 3 saubere Lehrpfad-Ordner (lehrpfad_1_grundlagen, lehrpfad_2_oop_einstieg, lehrpfad_3_fortgeschrittenes_oop)

This commit is contained in:
Alex Mueller 2026-08-29 15:07:16 +02:00
parent 68373c537f
commit e74c243259
150 changed files with 430 additions and 355 deletions

View file

@ -10,5 +10,5 @@
"streak_tage": 1,
"letzter_aktiver_tag": "2026-08-29",
"historie": [],
"zuletzt_aktualisiert": "2026-08-29T14:53:37.686061"
"zuletzt_aktualisiert": "2026-08-29T15:07:09.451191"
}

View file

@ -35,47 +35,47 @@ Das Lernportal besitzt ein wissenschaftlich fundiertes Gamification-System (Self
### 🛣️ Lehrpfad 1: Grundlagen der Programmierung (Prozedural & Datenstrukturen)
| Modul | Titel | Themenschwerpunkte |
| :--- | :--- | :--- |
| **[G01. Taschenrechner](./g01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` |
| **[G02. Variablen & Typen](./g02_variablen_und_datentypen/)** | **Datentypen** | Speicherboxen, `int`, `float`, `str`, `bool`, Type Casting & Type Hints |
| **[G03. Ein- & Ausgabe](./g03_ein_und_ausgabe/)** | **Interaktion** | Tastatureingaben mit `input()`, f-Strings mit Formatierungs-Codes (`{preis:.2f} €`) |
| **[G04. Bedingungen](./g04_verzweigungen_und_bedingungen/)** | **Entscheidungen** | `if`, `elif`, `else`, Vergleichsoperatoren & Logik (`and`, `or`, `not`) |
| **[G05. Schleifen](./g05_schleifen_und_wiederholungen/)** | **Wiederholungen** | Zählschleifen mit `for in range()`, Bedingungsschleifen mit `while`, `break`/`continue` |
| **[G06. Funktionen](./g06_funktionen_und_module/)** | **Modularität** | `def`, `return`, Parameter, Scope & Module (`math`, `random`) |
| **[G07. Listen & Sequenzen](./g07_listen_und_sequenzen/)** | **Datenstrukturen 1** | Listen erstellen, Indexing, Slicing `[1:4]`, Methoden (`append`, `pop`) & `sum/min/max` |
| **[G08. Textverarbeitung](./g08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse |
| **[G09. Dictionaries & Sets](./g09_dictionaries_und_sets/)** | **Datenstrukturen 2** | Key-Value Paare (`{key: val}`), sicheres `.get()`, Mengen (`set`) ohne Duplikate |
| **[G10. Comprehensions & Datum](./g10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen |
| **[G01. Taschenrechner](./lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` |
| **[G02. Variablen & Typen](./lehrpfad_1_grundlagen/02_variablen_und_datentypen/)** | **Datentypen** | Speicherboxen, `int`, `float`, `str`, `bool`, Type Casting & Type Hints |
| **[G03. Ein- & Ausgabe](./lehrpfad_1_grundlagen/03_ein_und_ausgabe/)** | **Interaktion** | Tastatureingaben mit `input()`, f-Strings mit Formatierungs-Codes (`{preis:.2f} €`) |
| **[G04. Bedingungen](./lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/)** | **Entscheidungen** | `if`, `elif`, `else`, Vergleichsoperatoren & Logik (`and`, `or`, `not`) |
| **[G05. Schleifen](./lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/)** | **Wiederholungen** | Zählschleifen mit `for in range()`, Bedingungsschleifen mit `while`, `break`/`continue` |
| **[G06. Funktionen](./lehrpfad_1_grundlagen/06_funktionen_und_module/)** | **Modularität** | `def`, `return`, Parameter, Scope & Module (`math`, `random`) |
| **[G07. Listen & Sequenzen](./lehrpfad_1_grundlagen/07_listen_und_sequenzen/)** | **Datenstrukturen 1** | Listen erstellen, Indexing, Slicing `[1:4]`, Methoden (`append`, `pop`) & `sum/min/max` |
| **[G08. Textverarbeitung](./lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse |
| **[G09. Dictionaries & Sets](./lehrpfad_1_grundlagen/09_dictionaries_und_sets/)** | **Datenstrukturen 2** | Key-Value Paare (`{key: val}`), sicheres `.get()`, Mengen (`set`) ohne Duplikate |
| **[G10. Comprehensions & Datum](./lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen |
---
### 🛣️ Lehrpfad 2: Einstieg in die Objektorientierung (OOP) & Entwickler-Tools
| Modul | Titel | Themenschwerpunkte |
| :--- | :--- | :--- |
| **[00. Fehlersuche](./00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` |
| **[01. Einstieg in Klassen](./01_einstieg_klassen/)** | **Bauplan vs. Objekt** | Klassen definieren, Instanziierung, Punktnotation & Type Hints (`Fahrrad`) |
| **[02. Konstruktor & self](./02_init_und_self/)** | **Initialisierung & UML** | `__init__`, `self`, Startwerte & UML-Klassendiagramme (`Bankkonto`, `Smartphone`) |
| **[03. Methoden & Verhalten](./03_methoden_und_verhalten/)** | **Objekt-Interaktion** | Methoden definieren, Rückgabewerte & Duell zweier Objekte (`Rennauto`) |
| **[04. Schöne Textausgabe](./04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) |
| **[04b. VS Code Installation](./04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts |
| **[04c. Git & Versionskontrolle](./04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push |
| **[05. Objekte kombinieren](./05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) |
| **[06. Mini-Projekt OOP 1](./06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal |
| **[00. Fehlersuche](./lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` |
| **[01. Einstieg in Klassen](./lehrpfad_2_oop_einstieg/01_einstieg_klassen/)** | **Bauplan vs. Objekt** | Klassen definieren, Instanziierung, Punktnotation & Type Hints (`Fahrrad`) |
| **[02. Konstruktor & self](./lehrpfad_2_oop_einstieg/02_init_und_self/)** | **Initialisierung & UML** | `__init__`, `self`, Startwerte & UML-Klassendiagramme (`Bankkonto`, `Smartphone`) |
| **[03. Methoden & Verhalten](./lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/)** | **Objekt-Interaktion** | Methoden definieren, Rückgabewerte & Duell zweier Objekte (`Rennauto`) |
| **[04. Schöne Textausgabe](./lehrpfad_2_oop_einstieg/04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) |
| **[04b. VS Code Installation](./lehrpfad_2_oop_einstieg/04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts |
| **[04c. Git & Versionskontrolle](./lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push |
| **[05. Objekte kombinieren](./lehrpfad_2_oop_einstieg/05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) |
| **[06. Mini-Projekt OOP 1](./lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal |
---
### 🛣️ Lehrpfad 3: Fortgeschrittenes OOP, Softwarequalität & Desktop-GUIs
| Modul | Titel | Themenschwerpunkte |
| :--- | :--- | :--- |
| **[07. Referenzen & Speicher](./07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) |
| **[08. Operator Overloading](./08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) |
| **[09. Eigene Unit Tests & TDD](./09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD |
| **[10. Vererbung & `super()`](./10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte |
| **[11. Polymorphie & Interfaces](./11_polymorphie_und_interfaces/)** | **Polymorphism** | Duck Typing, abstrakte Basisklassen (`ABC`) & Geometrie-Engine |
| **[12. Exceptions & Fehler](./12_exceptions_und_fehlerbehandlung/)** | **Robustes Coding** | `try-except-else-finally`, `raise`, eigene Exception-Klassen im Banking |
| **[13. Datei-Persistenz](./13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export |
| **[14. Desktop-GUIs mit Tkinter](./14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur |
| **[15. Parameter & Container](./15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) |
| **[16. Master-Abschlussprojekt](./16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI |
| **[07. Referenzen & Speicher](./lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) |
| **[08. Operator Overloading](./lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) |
| **[09. Eigene Unit Tests & TDD](./lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD |
| **[10. Vererbung & `super()`](./lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte |
| **[11. Polymorphie & Interfaces](./lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces/)** | **Polymorphism** | Duck Typing, abstrakte Basisklassen (`ABC`) & Geometrie-Engine |
| **[12. Exceptions & Fehler](./lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung/)** | **Robustes Coding** | `try-except-else-finally`, `raise`, eigene Exception-Klassen im Banking |
| **[13. Datei-Persistenz](./lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export |
| **[14. Desktop-GUIs mit Tkinter](./lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur |
| **[15. Parameter & Container](./lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) |
| **[16. Master-Abschlussprojekt](./lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI |
---

View file

@ -11,80 +11,80 @@ window.GAMIFICATION_DATA = {
"streak_tage": 1,
"letzter_aktiver_tag": "2026-08-29",
"historie": [],
"zuletzt_aktualisiert": "2026-08-29T14:53:37.686061"
"zuletzt_aktualisiert": "2026-08-29T15:07:09.451191"
};
window.GAMIFICATION_BADGES_KATALOG = {
"rechenkonegin": {
"id": "rechenkonegin",
"icon": "🧮",
"name": "Rechenkönigin",
"desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).",
"desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).",
"xp_bonus": 100,
"kriterium": [
"g01_erste_schritte_taschenrechner",
"g02_variablen_und_datentypen"
"lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner",
"lehrpfad_1_grundlagen/02_variablen_und_datentypen"
]
},
"dialog_profi": {
"id": "dialog_profi",
"icon": "💬",
"name": "Dialog-Profi",
"desc": "Grundlagen G03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).",
"desc": "Grundlagen 03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).",
"xp_bonus": 75,
"kriterium": [
"g03_ein_und_ausgabe"
"lehrpfad_1_grundlagen/03_ein_und_ausgabe"
]
},
"weichenstellerin": {
"id": "weichenstellerin",
"icon": "🚦",
"name": "Weichenstellerin",
"desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).",
"desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).",
"xp_bonus": 75,
"kriterium": [
"g04_verzweigungen_und_bedingungen"
"lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen"
]
},
"schleifen_dompteurin": {
"id": "schleifen_dompteurin",
"icon": "🎡",
"name": "Schleifen-Dompteurin",
"desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).",
"desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).",
"xp_bonus": 100,
"kriterium": [
"g05_schleifen_und_wiederholungen"
"lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen"
]
},
"funktions_zauberin": {
"id": "funktions_zauberin",
"icon": "🪄",
"name": "Funktions-Zauberin",
"desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).",
"desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).",
"xp_bonus": 100,
"kriterium": [
"g06_funktionen_und_module"
"lehrpfad_1_grundlagen/06_funktionen_und_module"
]
},
"listen_archivarin": {
"id": "listen_archivarin",
"icon": "📋",
"name": "Listen-Archivarin",
"desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).",
"desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).",
"xp_bonus": 120,
"kriterium": [
"g07_listen_und_sequenzen",
"g08_textverarbeitung_und_strings"
"lehrpfad_1_grundlagen/07_listen_und_sequenzen",
"lehrpfad_1_grundlagen/08_textverarbeitung_und_strings"
]
},
"daten_strategin": {
"id": "daten_strategin",
"icon": "🗃️",
"name": "Daten-Strategin",
"desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).",
"desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).",
"xp_bonus": 150,
"kriterium": [
"g09_dictionaries_und_sets",
"g10_comprehensions_datum_algorithmen"
"lehrpfad_1_grundlagen/09_dictionaries_und_sets",
"lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen"
]
},
"bug_jaegerin": {
@ -94,7 +94,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).",
"xp_bonus": 100,
"kriterium": [
"00_fehlersuche_und_grundlagen"
"lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen"
]
},
"erste_architektin": {
@ -104,9 +104,9 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).",
"xp_bonus": 200,
"kriterium": [
"01_einstieg_klassen",
"02_init_und_self",
"03_methoden_und_verhalten"
"lehrpfad_2_oop_einstieg/01_einstieg_klassen",
"lehrpfad_2_oop_einstieg/02_init_und_self",
"lehrpfad_2_oop_einstieg/03_methoden_und_verhalten"
]
},
"tamagotchi_mama": {
@ -116,7 +116,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).",
"xp_bonus": 250,
"kriterium": [
"06_abschlussprojekt_tamagotchi"
"lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi"
]
},
"zeit_reisende": {
@ -126,7 +126,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.",
"xp_bonus": 100,
"kriterium": [
"04_str_und_darstellung"
"lehrpfad_2_oop_einstieg/04_str_und_darstellung"
]
},
"qualitaets_garantin": {
@ -136,7 +136,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).",
"xp_bonus": 200,
"kriterium": [
"09_eigene_unit_tests_schreiben"
"lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben"
]
},
"oop_grossmeisterin": {
@ -146,9 +146,9 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).",
"xp_bonus": 300,
"kriterium": [
"10_vererbung_und_super",
"11_polymorphie_und_interfaces",
"12_exceptions_und_fehlerbehandlung"
"lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super",
"lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces",
"lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung"
]
},
"software_architektin": {
@ -158,7 +158,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!",
"xp_bonus": 500,
"kriterium": [
"16_master_abschlussprojekt"
"lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt"
]
}
};

View file

@ -35,63 +35,72 @@ LEVEL_STUFEN = [
{"level": 10, "min_xp": 6801, "max_xp": 99999, "titel": "Software-Architektin 🏆", "rang": "Großmeisterin"},
]
# 14 freischaltbare Trophäen mit didaktischen Kriterien
# 14 freischaltbare Trophäen mit didaktischen Kriterien (abgestimmt auf neue Lehrpfad-Pfade)
BADGES_KATALOG = {
"rechenkonegin": {
"id": "rechenkonegin",
"icon": "🧮",
"name": "Rechenkönigin",
"desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).",
"desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).",
"xp_bonus": 100,
"kriterium": ["g01_erste_schritte_taschenrechner", "g02_variablen_und_datentypen"]
"kriterium": [
"lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner",
"lehrpfad_1_grundlagen/02_variablen_und_datentypen"
]
},
"dialog_profi": {
"id": "dialog_profi",
"icon": "💬",
"name": "Dialog-Profi",
"desc": "Grundlagen G03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).",
"desc": "Grundlagen 03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).",
"xp_bonus": 75,
"kriterium": ["g03_ein_und_ausgabe"]
"kriterium": ["lehrpfad_1_grundlagen/03_ein_und_ausgabe"]
},
"weichenstellerin": {
"id": "weichenstellerin",
"icon": "🚦",
"name": "Weichenstellerin",
"desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).",
"desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).",
"xp_bonus": 75,
"kriterium": ["g04_verzweigungen_und_bedingungen"]
"kriterium": ["lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen"]
},
"schleifen_dompteurin": {
"id": "schleifen_dompteurin",
"icon": "🎡",
"name": "Schleifen-Dompteurin",
"desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).",
"desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).",
"xp_bonus": 100,
"kriterium": ["g05_schleifen_und_wiederholungen"]
"kriterium": ["lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen"]
},
"funktions_zauberin": {
"id": "funktions_zauberin",
"icon": "🪄",
"name": "Funktions-Zauberin",
"desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).",
"desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).",
"xp_bonus": 100,
"kriterium": ["g06_funktionen_und_module"]
"kriterium": ["lehrpfad_1_grundlagen/06_funktionen_und_module"]
},
"listen_archivarin": {
"id": "listen_archivarin",
"icon": "📋",
"name": "Listen-Archivarin",
"desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).",
"desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).",
"xp_bonus": 120,
"kriterium": ["g07_listen_und_sequenzen", "g08_textverarbeitung_und_strings"]
"kriterium": [
"lehrpfad_1_grundlagen/07_listen_und_sequenzen",
"lehrpfad_1_grundlagen/08_textverarbeitung_und_strings"
]
},
"daten_strategin": {
"id": "daten_strategin",
"icon": "🗃️",
"name": "Daten-Strategin",
"desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).",
"desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).",
"xp_bonus": 150,
"kriterium": ["g09_dictionaries_und_sets", "g10_comprehensions_datum_algorithmen"]
"kriterium": [
"lehrpfad_1_grundlagen/09_dictionaries_und_sets",
"lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen"
]
},
"bug_jaegerin": {
"id": "bug_jaegerin",
@ -99,7 +108,7 @@ BADGES_KATALOG = {
"name": "Bug-Jägerin",
"desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).",
"xp_bonus": 100,
"kriterium": ["00_fehlersuche_und_grundlagen"]
"kriterium": ["lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen"]
},
"erste_architektin": {
"id": "erste_architektin",
@ -107,7 +116,11 @@ BADGES_KATALOG = {
"name": "Erste Architektin",
"desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).",
"xp_bonus": 200,
"kriterium": ["01_einstieg_klassen", "02_init_und_self", "03_methoden_und_verhalten"]
"kriterium": [
"lehrpfad_2_oop_einstieg/01_einstieg_klassen",
"lehrpfad_2_oop_einstieg/02_init_und_self",
"lehrpfad_2_oop_einstieg/03_methoden_und_verhalten"
]
},
"tamagotchi_mama": {
"id": "tamagotchi_mama",
@ -115,7 +128,7 @@ BADGES_KATALOG = {
"name": "Tamagotchi-Mama",
"desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).",
"xp_bonus": 250,
"kriterium": ["06_abschlussprojekt_tamagotchi"]
"kriterium": ["lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi"]
},
"zeit_reisende": {
"id": "zeit_reisende",
@ -123,7 +136,7 @@ BADGES_KATALOG = {
"name": "Git-Zeitreisende",
"desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.",
"xp_bonus": 100,
"kriterium": ["04_str_und_darstellung"]
"kriterium": ["lehrpfad_2_oop_einstieg/04_str_und_darstellung"]
},
"qualitaets_garantin": {
"id": "qualitaets_garantin",
@ -131,7 +144,7 @@ BADGES_KATALOG = {
"name": "TDD-Qualitätsgarantin",
"desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).",
"xp_bonus": 200,
"kriterium": ["09_eigene_unit_tests_schreiben"]
"kriterium": ["lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben"]
},
"oop_grossmeisterin": {
"id": "oop_grossmeisterin",
@ -139,7 +152,11 @@ BADGES_KATALOG = {
"name": "Vererbungs-Koryphäe",
"desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).",
"xp_bonus": 300,
"kriterium": ["10_vererbung_und_super", "11_polymorphie_und_interfaces", "12_exceptions_und_fehlerbehandlung"]
"kriterium": [
"lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super",
"lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces",
"lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung"
]
},
"software_architektin": {
"id": "software_architektin",
@ -147,7 +164,7 @@ BADGES_KATALOG = {
"name": "Meister-Entwicklerin",
"desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!",
"xp_bonus": 500,
"kriterium": ["16_master_abschlussprojekt"]
"kriterium": ["lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt"]
}
}
@ -259,7 +276,6 @@ window.GAMIFICATION_LEVEL_STUFEN = {json.dumps(LEVEL_STUFEN, indent=2, ensure_as
neu_freigeschaltet_badges = []
for badge_id, badge in BADGES_KATALOG.items():
kriterien = badge["kriterium"]
# Alle Kriterien-Ordner müssen gelöst sein
if all(k in neue_geloeste for k in kriterien):
if badge_id not in alte_badges:
neu_freigeschaltet_badges.append(badge)
@ -308,7 +324,7 @@ window.GAMIFICATION_LEVEL_STUFEN = {json.dumps(LEVEL_STUFEN, indent=2, ensure_as
}
def report_single_chapter_result(kapitel_ordner: str, tests_erfolgreich: bool, tests_anzahl: int):
def report_single_chapter_result(kapitel_pfad_relativ: str, tests_erfolgreich: bool, tests_anzahl: int):
"""
Wird von einzelnen test_aufgabe.py Skripten aufgerufen, wenn sie direkt ausgeführt werden.
Aktualisiert den Spielstand und gibt motivierendes Feedback im Terminal aus.
@ -317,8 +333,8 @@ def report_single_chapter_result(kapitel_ordner: str, tests_erfolgreich: bool, t
aktuelle_geloeste = set(gm.state.get("geloeste_kapitel", []))
if tests_erfolgreich and tests_anzahl > 0:
war_bereits_geloest = kapitel_ordner in aktuelle_geloeste
aktuelle_geloeste.add(kapitel_ordner)
war_bereits_geloest = kapitel_pfad_relativ in aktuelle_geloeste
aktuelle_geloeste.add(kapitel_pfad_relativ)
# Gesamtbestandene Tests schätzen/updaten
alte_tests = gm.state.get("bestandene_tests", 0)

View file

@ -97,7 +97,7 @@
<div class="roadmap-grid">
<!-- G01 -->
<a href="g01_erste_schritte_taschenrechner/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G01</span>
<div class="roadmap-title">🧮 Python als Taschenrechner</div>
@ -107,7 +107,7 @@
</a>
<!-- G02 -->
<a href="g02_variablen_und_datentypen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/02_variablen_und_datentypen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G02</span>
<div class="roadmap-title">📦 Variablen &amp; Datentypen</div>
@ -117,7 +117,7 @@
</a>
<!-- G03 -->
<a href="g03_ein_und_ausgabe/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/03_ein_und_ausgabe/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G03</span>
<div class="roadmap-title">💬 Interaktive Ein- &amp; Ausgabe</div>
@ -127,7 +127,7 @@
</a>
<!-- G04 -->
<a href="g04_verzweigungen_und_bedingungen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G04</span>
<div class="roadmap-title">🚦 Bedingungen &amp; Verzweigungen</div>
@ -137,7 +137,7 @@
</a>
<!-- G05 -->
<a href="g05_schleifen_und_wiederholungen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G05</span>
<div class="roadmap-title">🎡 Schleifen &amp; Wiederholungen</div>
@ -147,7 +147,7 @@
</a>
<!-- G06 -->
<a href="g06_funktionen_und_module/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/06_funktionen_und_module/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G06</span>
<div class="roadmap-title">🪄 Eigene Funktionen &amp; Module</div>
@ -157,7 +157,7 @@
</a>
<!-- G07 -->
<a href="g07_listen_und_sequenzen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/07_listen_und_sequenzen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G07</span>
<div class="roadmap-title">📋 Listen &amp; Sequenzen</div>
@ -167,7 +167,7 @@
</a>
<!-- G08 -->
<a href="g08_textverarbeitung_und_strings/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G08</span>
<div class="roadmap-title">🔤 Textverarbeitung &amp; Strings</div>
@ -177,7 +177,7 @@
</a>
<!-- G09 -->
<a href="g09_dictionaries_und_sets/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/09_dictionaries_und_sets/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G09</span>
<div class="roadmap-title">🗃️ Dictionaries &amp; Sets</div>
@ -187,7 +187,7 @@
</a>
<!-- G10 -->
<a href="g10_comprehensions_datum_algorithmen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<a href="lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/index.html" class="roadmap-card" style="border-left: 4px solid #3b82f6;">
<div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G10</span>
<div class="roadmap-title">🚀 Comprehensions &amp; Algorithmen</div>
@ -212,7 +212,7 @@
<div class="roadmap-grid">
<!-- Kapitel 0 -->
<a href="00_fehlersuche_und_grundlagen/index.html" class="roadmap-card" style="border-left: 4px solid var(--purple);">
<a href="lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html" class="roadmap-card" style="border-left: 4px solid var(--purple);">
<div>
<span class="roadmap-number" style="background: var(--purple-light); color: var(--purple);">Warm-up 00</span>
<div class="roadmap-title">🔍 Fehlersuche &amp; Bugs</div>
@ -222,7 +222,7 @@
</a>
<!-- Kapitel 1 -->
<a href="01_einstieg_klassen/index.html" class="roadmap-card">
<a href="lehrpfad_2_oop_einstieg/01_einstieg_klassen/index.html" class="roadmap-card">
<div>
<span class="roadmap-number">Kapitel 01</span>
<div class="roadmap-title">🐶 Die erste Klasse</div>
@ -232,7 +232,7 @@
</a>
<!-- Kapitel 2 -->
<a href="02_init_und_self/index.html" class="roadmap-card">
<a href="lehrpfad_2_oop_einstieg/02_init_und_self/index.html" class="roadmap-card">
<div>
<span class="roadmap-number">Kapitel 02</span>
<div class="roadmap-title">💳 Konstruktor & self</div>
@ -242,7 +242,7 @@
</a>
<!-- Kapitel 3 -->
<a href="03_methoden_und_verhalten/index.html" class="roadmap-card">
<a href="lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/index.html" class="roadmap-card">
<div>
<span class="roadmap-number">Kapitel 03</span>
<div class="roadmap-title">⚔️ Methoden & Verhalten</div>
@ -252,7 +252,7 @@
</a>
<!-- Kapitel 4 -->
<a href="04_str_und_darstellung/index.html" class="roadmap-card">
<a href="lehrpfad_2_oop_einstieg/04_str_und_darstellung/index.html" class="roadmap-card">
<div>
<span class="roadmap-number">Kapitel 04</span>
<div class="roadmap-title">🧾 Schöne Textausgabe</div>
@ -262,7 +262,7 @@
</a>
<!-- Kapitel 4b -->
<a href="04b_umstieg_vscode/index.html" class="roadmap-card" style="border-left: 4px solid var(--secondary);">
<a href="lehrpfad_2_oop_einstieg/04b_umstieg_vscode/index.html" class="roadmap-card" style="border-left: 4px solid var(--secondary);">
<div>
<span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Exkurs 04b</span>
<div class="roadmap-title">🚀 Installation &amp; Setup VS Code</div>
@ -272,7 +272,7 @@
</a>
<!-- Kapitel 4c (Git) -->
<a href="04c_git_und_versionskontrolle/index.html" class="roadmap-card" style="border-left: 4px solid var(--success);">
<a href="lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle/index.html" class="roadmap-card" style="border-left: 4px solid var(--success);">
<div>
<span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Exkurs 04c</span>
<div class="roadmap-title">🌿 Git &amp; Versionskontrolle</div>
@ -282,7 +282,7 @@
</a>
<!-- Kapitel 5 -->
<a href="05_objekte_kombinieren/index.html" class="roadmap-card">
<a href="lehrpfad_2_oop_einstieg/05_objekte_kombinieren/index.html" class="roadmap-card">
<div>
<span class="roadmap-number">Kapitel 05</span>
<div class="roadmap-title">🎵 Assoziation & Komposition</div>
@ -292,7 +292,7 @@
</a>
<!-- Kapitel 6 -->
<a href="06_abschlussprojekt_tamagotchi/index.html" class="roadmap-card">
<a href="lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/index.html" class="roadmap-card">
<div>
<span class="roadmap-number">Kapitel 06</span>
<div class="roadmap-title">🥚 Mini-Projekt: Tamagotchi</div>
@ -317,7 +317,7 @@
<div class="roadmap-grid">
<!-- Kapitel 7 -->
<a href="07_referenzen_und_speicher/index.html" class="roadmap-card" style="border-left: 4px solid var(--success);">
<a href="lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html" class="roadmap-card" style="border-left: 4px solid var(--success);">
<div>
<span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Kapitel 07</span>
<div class="roadmap-title">🌳 Referenzen &amp; Stammbäume</div>
@ -327,7 +327,7 @@
</a>
<!-- Kapitel 8 -->
<a href="08_operator_overloading_dunder/index.html" class="roadmap-card" style="border-left: 4px solid var(--secondary);">
<a href="lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder/index.html" class="roadmap-card" style="border-left: 4px solid var(--secondary);">
<div>
<span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Kapitel 08</span>
<div class="roadmap-title">➕ Operator Overloading &amp; Dunder</div>
@ -337,7 +337,7 @@
</a>
<!-- Kapitel 9 -->
<a href="09_eigene_unit_tests_schreiben/index.html" class="roadmap-card" style="border-left: 4px solid var(--primary);">
<a href="lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben/index.html" class="roadmap-card" style="border-left: 4px solid var(--primary);">
<div>
<span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 09</span>
<div class="roadmap-title">🧪 Eigene Unit Tests &amp; TDD</div>
@ -347,7 +347,7 @@
</a>
<!-- Kapitel 10 -->
<a href="10_vererbung_und_super/index.html" class="roadmap-card" style="border-left: 4px solid var(--primary);">
<a href="lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super/index.html" class="roadmap-card" style="border-left: 4px solid var(--primary);">
<div>
<span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 10</span>
<div class="roadmap-title">🧬 Vererbung &amp; super()</div>
@ -357,7 +357,7 @@
</a>
<!-- Kapitel 11 -->
<a href="11_polymorphie_und_interfaces/index.html" class="roadmap-card" style="border-left: 4px solid var(--secondary);">
<a href="lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces/index.html" class="roadmap-card" style="border-left: 4px solid var(--secondary);">
<div>
<span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Kapitel 11</span>
<div class="roadmap-title">🎭 Polymorphie &amp; Interfaces</div>
@ -367,7 +367,7 @@
</a>
<!-- Kapitel 12 -->
<a href="12_exceptions_und_fehlerbehandlung/index.html" class="roadmap-card" style="border-left: 4px solid var(--danger);">
<a href="lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung/index.html" class="roadmap-card" style="border-left: 4px solid var(--danger);">
<div>
<span class="roadmap-number" style="background: var(--danger-light); color: var(--danger);">Kapitel 12</span>
<div class="roadmap-title">🛡️ Exceptions &amp; Fehlerbehandlung</div>
@ -377,7 +377,7 @@
</a>
<!-- Kapitel 13 -->
<a href="13_persistenz_json_und_csv/index.html" class="roadmap-card" style="border-left: 4px solid var(--primary);">
<a href="lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv/index.html" class="roadmap-card" style="border-left: 4px solid var(--primary);">
<div>
<span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 13</span>
<div class="roadmap-title">💾 Datei-Persistenz: JSON &amp; CSV</div>
@ -387,7 +387,7 @@
</a>
<!-- Kapitel 14 -->
<a href="14_gui_mit_tkinter/index.html" class="roadmap-card" style="border-left: 4px solid var(--purple);">
<a href="lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter/index.html" class="roadmap-card" style="border-left: 4px solid var(--purple);">
<div>
<span class="roadmap-number" style="background: var(--purple-light); color: var(--purple);">Kapitel 14</span>
<div class="roadmap-title">🖥️ Desktop-GUIs mit Tkinter</div>
@ -397,7 +397,7 @@
</a>
<!-- Kapitel 15 -->
<a href="15_parameter_und_container/index.html" class="roadmap-card" style="border-left: 4px solid var(--success);">
<a href="lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container/index.html" class="roadmap-card" style="border-left: 4px solid var(--success);">
<div>
<span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Kapitel 15</span>
<div class="roadmap-title">🎒 Parameter &amp; Eigene Container</div>
@ -407,7 +407,7 @@
</a>
<!-- Kapitel 16 -->
<a href="16_master_abschlussprojekt/index.html" class="roadmap-card" style="border-left: 4px solid #f59e0b; background: linear-gradient(180deg, #ffffff 0%, #fffbeb 100%);">
<a href="lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt/index.html" class="roadmap-card" style="border-left: 4px solid #f59e0b; background: linear-gradient(180deg, #ffffff 0%, #fffbeb 100%);">
<div>
<span class="roadmap-number" style="background: #fef3c7; color: #b45309; font-weight: bold;">🏆 Kapitel 16 &bull; Masterprojekt</span>
<div class="roadmap-title">🐾 PetCare &amp; Tierheim-Manager</div>

View file

@ -4,18 +4,18 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grundlagen 01: Python als Taschenrechner</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Grundlagen 01</span>
<span>&rsaquo;</span>
<a href="../g02_variablen_und_datentypen/index.html">Grundlagen 02 &rarr;</a>
<a href="../02_variablen_und_datentypen/index.html">Grundlagen 02 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen 01 &bull; Schulabgleich 02.1</div>
<h1>Python als Taschenrechner 🧮</h1>
@ -294,8 +294,8 @@
</div>
<div class="footer-nav">
<a href="../index.html" class="btn btn-secondary">&larr; Zurück zur Übersicht</a>
<a href="../g02_variablen_und_datentypen/index.html" class="btn">Weiter zu Kapitel G02: Variablen &amp; Datentypen &rarr;</a>
<a href="../../index.html" class="btn btn-secondary">&larr; Zurück zur Übersicht</a>
<a href="../02_variablen_und_datentypen/index.html" class="btn">Weiter zu Kapitel G02: Variablen &amp; Datentypen &rarr;</a>
</div>
</section>
@ -303,7 +303,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -127,9 +127,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Grundlagen 02: Variablen & Datentypen</title>
<link rel="stylesheet" href="../assets/style.css">
<link rel="stylesheet" href="../../assets/style.css">
</head>
<body>
<header>
<div class="header-container">
<nav class="nav-links">
<a href="../g01_erste_schritte_taschenrechner/index.html">&larr; Grundlagen 01</a>
<a href="../01_erste_schritte_taschenrechner/index.html">&larr; Grundlagen 01</a>
<span>&rsaquo;</span>
<a href="../index.html">🏠 Kursübersicht</a>
<a href="../../index.html">🏠 Kursübersicht</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Grundlagen 02</span>
<span>&rsaquo;</span>
<a href="../g03_ein_und_ausgabe/index.html">Grundlagen 03 &rarr;</a>
<a href="../03_ein_und_ausgabe/index.html">Grundlagen 03 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen 02 &bull; Schulabgleich 03.0 &amp; 03.1</div>
<h1>Variablen &amp; Datentypen 📦🏷️</h1>
@ -245,8 +245,8 @@
</div>
<div class="footer-nav">
<a href="../g01_erste_schritte_taschenrechner/index.html" class="btn btn-secondary">&larr; Zurück zu G01: Taschenrechner</a>
<a href="../g03_ein_und_ausgabe/index.html" class="btn">Weiter zu Kapitel G03: Ein- &amp; Ausgabe &rarr;</a>
<a href="../01_erste_schritte_taschenrechner/index.html" class="btn btn-secondary">&larr; Zurück zu G01: Taschenrechner</a>
<a href="../03_ein_und_ausgabe/index.html" class="btn">Weiter zu Kapitel G03: Ein- &amp; Ausgabe &rarr;</a>
</div>
</section>
@ -254,7 +254,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -113,9 +113,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G03: Interaktive Ein- & Ausgabe</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g02_variablen_und_datentypen/index.html">&larr; Kapitel G02</a>
<a href="../02_variablen_und_datentypen/index.html">&larr; Kapitel G02</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G03</span>
<span>&rsaquo;</span>
<a href="../g04_verzweigungen_und_bedingungen/index.html">Kapitel G04 &rarr;</a>
<a href="../04_verzweigungen_und_bedingungen/index.html">Kapitel G04 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen G03 &bull; Schulabgleich 07.0</div>
<h1>Interaktive Ein- &amp; Ausgabe 💬⌨️</h1>
@ -248,8 +248,8 @@ return f"Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg:
</div>
<div class="footer-nav">
<a href="../g02_variablen_und_datentypen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G02</a>
<a href="../g04_verzweigungen_und_bedingungen/index.html" class="btn">Weiter zu Kapitel G04: Verzweigungen &rarr;</a>
<a href="../02_variablen_und_datentypen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G02</a>
<a href="../04_verzweigungen_und_bedingungen/index.html" class="btn">Weiter zu Kapitel G04: Verzweigungen &rarr;</a>
</div>
</section>
@ -257,7 +257,7 @@ return f"Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg:
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -145,9 +145,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G04: Bedingungen & Verzweigungen</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g03_ein_und_ausgabe/index.html">&larr; Kapitel G03</a>
<a href="../03_ein_und_ausgabe/index.html">&larr; Kapitel G03</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G04</span>
<span>&rsaquo;</span>
<a href="../g05_schleifen_und_wiederholungen/index.html">Kapitel G05 &rarr;</a>
<a href="../05_schleifen_und_wiederholungen/index.html">Kapitel G05 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen G04 &bull; Schulabgleich 08.0</div>
<h1>Bedingungen &amp; Verzweigungen 🛤️🔀</h1>
@ -280,8 +280,8 @@ return False</code></pre>
</div>
<div class="footer-nav">
<a href="../g03_ein_und_ausgabe/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G03</a>
<a href="../g05_schleifen_und_wiederholungen/index.html" class="btn">Weiter zu Kapitel G05: Schleifen &rarr;</a>
<a href="../03_ein_und_ausgabe/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G03</a>
<a href="../05_schleifen_und_wiederholungen/index.html" class="btn">Weiter zu Kapitel G05: Schleifen &rarr;</a>
</div>
</section>
@ -289,7 +289,7 @@ return False</code></pre>
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -160,9 +160,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G05: Schleifen & Wiederholungen</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g04_verzweigungen_und_bedingungen/index.html">&larr; Kapitel G04</a>
<a href="../04_verzweigungen_und_bedingungen/index.html">&larr; Kapitel G04</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G05</span>
<span>&rsaquo;</span>
<a href="../g06_funktionen_und_module/index.html">Kapitel G06 &rarr;</a>
<a href="../06_funktionen_und_module/index.html">Kapitel G06 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen G05 &bull; Schulabgleich 09.1 &amp; 09.2</div>
<h1>Schleifen &amp; Wiederholungen 🎡🔄</h1>
@ -321,8 +321,8 @@
</div>
<div class="footer-nav">
<a href="../g04_verzweigungen_und_bedingungen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G04</a>
<a href="../g06_funktionen_und_module/index.html" class="btn">Weiter zu Kapitel G06 (Funktionen &amp; Module) &rarr;</a>
<a href="../04_verzweigungen_und_bedingungen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G04</a>
<a href="../06_funktionen_und_module/index.html" class="btn">Weiter zu Kapitel G06 (Funktionen &amp; Module) &rarr;</a>
</div>
</section>
@ -330,7 +330,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -178,9 +178,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G06: Eigene Funktionen & Module</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g05_schleifen_und_wiederholungen/index.html">&larr; Kapitel G05</a>
<a href="../05_schleifen_und_wiederholungen/index.html">&larr; Kapitel G05</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G06</span>
<span>&rsaquo;</span>
<a href="../g07_listen_und_sequenzen/index.html">Kapitel G07 &rarr;</a>
<a href="../07_listen_und_sequenzen/index.html">Kapitel G07 &rarr;</a>
</nav>
<div class="header-badge">Grundlagen G06 &bull; Schulabgleich 05.0 &amp; 05.1</div>
<h1>Eigene Funktionen &amp; Module 🪄📦</h1>
@ -274,8 +274,8 @@
</div>
<div class="footer-nav">
<a href="../g05_schleifen_und_wiederholungen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G05</a>
<a href="../g07_listen_und_sequenzen/index.html" class="btn">Weiter zu Kapitel G07 (Listen &amp; Sequenzen) &rarr;</a>
<a href="../05_schleifen_und_wiederholungen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G05</a>
<a href="../07_listen_und_sequenzen/index.html" class="btn">Weiter zu Kapitel G07 (Listen &amp; Sequenzen) &rarr;</a>
</div>
</section>
@ -283,7 +283,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -167,9 +167,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,16 +4,16 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G07: Listen & Sequenzen in Python</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g06_funktionen_und_module/index.html">Kapitel G06</a>
<a href="../06_funktionen_und_module/index.html">Kapitel G06</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G07</span>
</nav>
@ -265,8 +265,8 @@
</div>
<div class="footer-nav">
<a href="../g06_funktionen_und_module/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G06</a>
<a href="../g08_textverarbeitung_und_strings/index.html" class="btn">Weiter zu Kapitel G08 &rarr;</a>
<a href="../06_funktionen_und_module/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G06</a>
<a href="../08_textverarbeitung_und_strings/index.html" class="btn">Weiter zu Kapitel G08 &rarr;</a>
</div>
</section>
@ -274,7 +274,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -123,9 +123,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,16 +4,16 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G08: Textverarbeitung & Strings in Python</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g07_listen_und_sequenzen/index.html">Kapitel G07</a>
<a href="../07_listen_und_sequenzen/index.html">Kapitel G07</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G08</span>
</nav>
@ -220,8 +220,8 @@
</div>
<div class="footer-nav">
<a href="../g07_listen_und_sequenzen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G07</a>
<a href="../g09_dictionaries_und_sets/index.html" class="btn">Weiter zu Kapitel G09 &rarr;</a>
<a href="../07_listen_und_sequenzen/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G07</a>
<a href="../09_dictionaries_und_sets/index.html" class="btn">Weiter zu Kapitel G09 &rarr;</a>
</div>
</section>
@ -229,7 +229,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -97,9 +97,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G09: Dictionaries &amp; Sets</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g08_textverarbeitung_und_strings/index.html">&larr; Kapitel G08</a>
<a href="../08_textverarbeitung_und_strings/index.html">&larr; Kapitel G08</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G09</span>
<span>&rsaquo;</span>
<a href="../g10_comprehensions_datum_algorithmen/index.html">Kapitel G10 &rarr;</a>
<a href="../10_comprehensions_datum_algorithmen/index.html">Kapitel G10 &rarr;</a>
</nav>
<div class="header-badge">Kapitel G09 &bull; Schulabgleich 15.0</div>
<h1>Dictionaries &amp; Sets: Schlüssel, Werte &amp; Mengen 🗃️✨</h1>
@ -294,8 +294,8 @@
</div>
<div class="footer-nav">
<a href="../g08_textverarbeitung_und_strings/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G08</a>
<a href="../g10_comprehensions_datum_algorithmen/index.html" class="btn">Weiter zu Kapitel G10: Comprehensions &amp; Algorithmen &rarr;</a>
<a href="../08_textverarbeitung_und_strings/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G08</a>
<a href="../10_comprehensions_datum_algorithmen/index.html" class="btn">Weiter zu Kapitel G10: Comprehensions &amp; Algorithmen &rarr;</a>
</div>
</section>
@ -303,7 +303,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -142,9 +142,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<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">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../g09_dictionaries_und_sets/index.html">&larr; Kapitel G09</a>
<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="../00_fehlersuche_und_grundlagen/index.html">Lehrpfad 2: OOP &rarr;</a>
<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>
@ -244,8 +244,8 @@
</div>
<div class="footer-nav">
<a href="../g09_dictionaries_und_sets/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel G09</a>
<a href="../00_fehlersuche_und_grundlagen/index.html" class="btn">Weiter zu Lehrpfad 2: OOP &amp; Klassen &rarr;</a>
<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>
@ -253,7 +253,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -143,9 +143,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<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">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel 00</span>
<span>&rsaquo;</span>
@ -198,7 +198,7 @@
</div>
<div class="footer-nav">
<a href="../index.html" class="btn btn-secondary">&larr; Zurück zur Übersicht</a>
<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>
@ -207,7 +207,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -63,9 +63,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 01: Einstieg in Klassen</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../00_fehlersuche_und_grundlagen/index.html">Kapitel 00</a>
<span>&rsaquo;</span>
@ -289,7 +289,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -84,9 +84,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 02: Konstruktor __init__ und self</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../01_einstieg_klassen/index.html">Kapitel 01</a>
<span>&rsaquo;</span>
@ -216,7 +216,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -85,9 +85,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 03: Methoden und Verhalten</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../02_init_und_self/index.html">Kapitel 02</a>
<span>&rsaquo;</span>
@ -196,7 +196,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -101,9 +101,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 04: __str__ und Darstellung</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../03_methoden_und_verhalten/index.html">Kapitel 03</a>
<span>&rsaquo;</span>
@ -203,7 +203,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -68,9 +68,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 04b: Umstieg & Installation von Visual Studio Code</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../04_str_und_darstellung/index.html">Kapitel 04</a>
<span>&rsaquo;</span>
@ -316,7 +316,7 @@ sudo snap install --classic code</code></pre>
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 04c: Git & Versionskontrolle</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../04b_umstieg_vscode/index.html">Kapitel 04b</a>
<span>&rsaquo;</span>
@ -212,7 +212,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 05: Komposition und Playlists</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../04c_git_und_versionskontrolle/index.html">Kapitel 04c (Git)</a>
<span>&rsaquo;</span>
@ -199,7 +199,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -87,9 +87,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 06: Tamagotchi Abschlussprojekt</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../05_objekte_kombinieren/index.html">Kapitel 05</a>
<span>&rsaquo;</span>
@ -169,7 +169,7 @@
<div class="footer-nav">
<a href="../05_objekte_kombinieren/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel 05</a>
<a href="../07_referenzen_und_speicher/index.html" class="btn">Weiter zu Kapitel 07: Referenzen &rarr;</a>
<a href="../../lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/index.html" class="btn">Weiter zu Kapitel 07: Referenzen &rarr;</a>
</div>
</section>
@ -177,7 +177,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

View file

@ -111,9 +111,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
root_dir = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(root_dir))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}"
report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,16 +4,16 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 07: Referenzen, Speicher & Stammbäume</title>
<link rel="stylesheet" href="../assets/style.css">
<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>
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../06_abschlussprojekt_tamagotchi/index.html">Kapitel 06</a>
<a href="../../lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/index.html">Kapitel 06</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel 07</span>
</nav>
@ -204,7 +204,7 @@
</div>
<div class="footer-nav">
<a href="../06_abschlussprojekt_tamagotchi/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel 06</a>
<a href="../../lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel 06</a>
<a href="../08_operator_overloading_dunder/index.html" class="btn">Weiter zu Kapitel 08 &rarr;</a>
</div>
</section>
@ -213,7 +213,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script>
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more