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, "streak_tage": 1,
"letzter_aktiver_tag": "2026-08-29", "letzter_aktiver_tag": "2026-08-29",
"historie": [], "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) ### 🛣️ Lehrpfad 1: Grundlagen der Programmierung (Prozedural & Datenstrukturen)
| Modul | Titel | Themenschwerpunkte | | Modul | Titel | Themenschwerpunkte |
| :--- | :--- | :--- | | :--- | :--- | :--- |
| **[G01. Taschenrechner](./g01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` | | **[G01. Taschenrechner](./lehrpfad_1_grundlagen/01_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 | | **[G02. Variablen & Typen](./lehrpfad_1_grundlagen/02_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} €`) | | **[G03. Ein- & Ausgabe](./lehrpfad_1_grundlagen/03_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`) | | **[G04. Bedingungen](./lehrpfad_1_grundlagen/04_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` | | **[G05. Schleifen](./lehrpfad_1_grundlagen/05_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`) | | **[G06. Funktionen](./lehrpfad_1_grundlagen/06_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` | | **[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](./g08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse | | **[G08. Textverarbeitung](./lehrpfad_1_grundlagen/08_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 | | **[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](./g10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen | | **[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 ### 🛣️ Lehrpfad 2: Einstieg in die Objektorientierung (OOP) & Entwickler-Tools
| Modul | Titel | Themenschwerpunkte | | Modul | Titel | Themenschwerpunkte |
| :--- | :--- | :--- | | :--- | :--- | :--- |
| **[00. Fehlersuche](./00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` | | **[00. Fehlersuche](./lehrpfad_2_oop_einstieg/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`) | | **[01. Einstieg in Klassen](./lehrpfad_2_oop_einstieg/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`) | | **[02. Konstruktor & self](./lehrpfad_2_oop_einstieg/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`) | | **[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](./04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) | | **[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](./04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts | | **[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](./04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push | | **[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](./05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) | | **[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](./06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal | | **[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 ### 🛣️ Lehrpfad 3: Fortgeschrittenes OOP, Softwarequalität & Desktop-GUIs
| Modul | Titel | Themenschwerpunkte | | Modul | Titel | Themenschwerpunkte |
| :--- | :--- | :--- | | :--- | :--- | :--- |
| **[07. Referenzen & Speicher](./07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) | | **[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](./08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) | | **[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](./09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD | | **[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()`](./10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte | | **[10. Vererbung & `super()`](./lehrpfad_3_fortgeschrittenes_oop/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 | | **[11. Polymorphie & Interfaces](./lehrpfad_3_fortgeschrittenes_oop/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 | | **[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](./13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export | | **[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](./14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur | | **[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](./15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) | | **[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](./16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI | | **[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, "streak_tage": 1,
"letzter_aktiver_tag": "2026-08-29", "letzter_aktiver_tag": "2026-08-29",
"historie": [], "historie": [],
"zuletzt_aktualisiert": "2026-08-29T14:53:37.686061" "zuletzt_aktualisiert": "2026-08-29T15:07:09.451191"
}; };
window.GAMIFICATION_BADGES_KATALOG = { window.GAMIFICATION_BADGES_KATALOG = {
"rechenkonegin": { "rechenkonegin": {
"id": "rechenkonegin", "id": "rechenkonegin",
"icon": "🧮", "icon": "🧮",
"name": "Rechenkönigin", "name": "Rechenkönigin",
"desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", "desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": [ "kriterium": [
"g01_erste_schritte_taschenrechner", "lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner",
"g02_variablen_und_datentypen" "lehrpfad_1_grundlagen/02_variablen_und_datentypen"
] ]
}, },
"dialog_profi": { "dialog_profi": {
"id": "dialog_profi", "id": "dialog_profi",
"icon": "💬", "icon": "💬",
"name": "Dialog-Profi", "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, "xp_bonus": 75,
"kriterium": [ "kriterium": [
"g03_ein_und_ausgabe" "lehrpfad_1_grundlagen/03_ein_und_ausgabe"
] ]
}, },
"weichenstellerin": { "weichenstellerin": {
"id": "weichenstellerin", "id": "weichenstellerin",
"icon": "🚦", "icon": "🚦",
"name": "Weichenstellerin", "name": "Weichenstellerin",
"desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", "desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).",
"xp_bonus": 75, "xp_bonus": 75,
"kriterium": [ "kriterium": [
"g04_verzweigungen_und_bedingungen" "lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen"
] ]
}, },
"schleifen_dompteurin": { "schleifen_dompteurin": {
"id": "schleifen_dompteurin", "id": "schleifen_dompteurin",
"icon": "🎡", "icon": "🎡",
"name": "Schleifen-Dompteurin", "name": "Schleifen-Dompteurin",
"desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).", "desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": [ "kriterium": [
"g05_schleifen_und_wiederholungen" "lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen"
] ]
}, },
"funktions_zauberin": { "funktions_zauberin": {
"id": "funktions_zauberin", "id": "funktions_zauberin",
"icon": "🪄", "icon": "🪄",
"name": "Funktions-Zauberin", "name": "Funktions-Zauberin",
"desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).", "desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": [ "kriterium": [
"g06_funktionen_und_module" "lehrpfad_1_grundlagen/06_funktionen_und_module"
] ]
}, },
"listen_archivarin": { "listen_archivarin": {
"id": "listen_archivarin", "id": "listen_archivarin",
"icon": "📋", "icon": "📋",
"name": "Listen-Archivarin", "name": "Listen-Archivarin",
"desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).", "desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).",
"xp_bonus": 120, "xp_bonus": 120,
"kriterium": [ "kriterium": [
"g07_listen_und_sequenzen", "lehrpfad_1_grundlagen/07_listen_und_sequenzen",
"g08_textverarbeitung_und_strings" "lehrpfad_1_grundlagen/08_textverarbeitung_und_strings"
] ]
}, },
"daten_strategin": { "daten_strategin": {
"id": "daten_strategin", "id": "daten_strategin",
"icon": "🗃️", "icon": "🗃️",
"name": "Daten-Strategin", "name": "Daten-Strategin",
"desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", "desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).",
"xp_bonus": 150, "xp_bonus": 150,
"kriterium": [ "kriterium": [
"g09_dictionaries_und_sets", "lehrpfad_1_grundlagen/09_dictionaries_und_sets",
"g10_comprehensions_datum_algorithmen" "lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen"
] ]
}, },
"bug_jaegerin": { "bug_jaegerin": {
@ -94,7 +94,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).", "desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": [ "kriterium": [
"00_fehlersuche_und_grundlagen" "lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen"
] ]
}, },
"erste_architektin": { "erste_architektin": {
@ -104,9 +104,9 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).", "desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).",
"xp_bonus": 200, "xp_bonus": 200,
"kriterium": [ "kriterium": [
"01_einstieg_klassen", "lehrpfad_2_oop_einstieg/01_einstieg_klassen",
"02_init_und_self", "lehrpfad_2_oop_einstieg/02_init_und_self",
"03_methoden_und_verhalten" "lehrpfad_2_oop_einstieg/03_methoden_und_verhalten"
] ]
}, },
"tamagotchi_mama": { "tamagotchi_mama": {
@ -116,7 +116,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).", "desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).",
"xp_bonus": 250, "xp_bonus": 250,
"kriterium": [ "kriterium": [
"06_abschlussprojekt_tamagotchi" "lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi"
] ]
}, },
"zeit_reisende": { "zeit_reisende": {
@ -126,7 +126,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.", "desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": [ "kriterium": [
"04_str_und_darstellung" "lehrpfad_2_oop_einstieg/04_str_und_darstellung"
] ]
}, },
"qualitaets_garantin": { "qualitaets_garantin": {
@ -136,7 +136,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).", "desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).",
"xp_bonus": 200, "xp_bonus": 200,
"kriterium": [ "kriterium": [
"09_eigene_unit_tests_schreiben" "lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben"
] ]
}, },
"oop_grossmeisterin": { "oop_grossmeisterin": {
@ -146,9 +146,9 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).", "desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).",
"xp_bonus": 300, "xp_bonus": 300,
"kriterium": [ "kriterium": [
"10_vererbung_und_super", "lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super",
"11_polymorphie_und_interfaces", "lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces",
"12_exceptions_und_fehlerbehandlung" "lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung"
] ]
}, },
"software_architektin": { "software_architektin": {
@ -158,7 +158,7 @@ window.GAMIFICATION_BADGES_KATALOG = {
"desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!", "desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!",
"xp_bonus": 500, "xp_bonus": 500,
"kriterium": [ "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"}, {"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 = { BADGES_KATALOG = {
"rechenkonegin": { "rechenkonegin": {
"id": "rechenkonegin", "id": "rechenkonegin",
"icon": "🧮", "icon": "🧮",
"name": "Rechenkönigin", "name": "Rechenkönigin",
"desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", "desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).",
"xp_bonus": 100, "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": { "dialog_profi": {
"id": "dialog_profi", "id": "dialog_profi",
"icon": "💬", "icon": "💬",
"name": "Dialog-Profi", "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, "xp_bonus": 75,
"kriterium": ["g03_ein_und_ausgabe"] "kriterium": ["lehrpfad_1_grundlagen/03_ein_und_ausgabe"]
}, },
"weichenstellerin": { "weichenstellerin": {
"id": "weichenstellerin", "id": "weichenstellerin",
"icon": "🚦", "icon": "🚦",
"name": "Weichenstellerin", "name": "Weichenstellerin",
"desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", "desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).",
"xp_bonus": 75, "xp_bonus": 75,
"kriterium": ["g04_verzweigungen_und_bedingungen"] "kriterium": ["lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen"]
}, },
"schleifen_dompteurin": { "schleifen_dompteurin": {
"id": "schleifen_dompteurin", "id": "schleifen_dompteurin",
"icon": "🎡", "icon": "🎡",
"name": "Schleifen-Dompteurin", "name": "Schleifen-Dompteurin",
"desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).", "desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": ["g05_schleifen_und_wiederholungen"] "kriterium": ["lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen"]
}, },
"funktions_zauberin": { "funktions_zauberin": {
"id": "funktions_zauberin", "id": "funktions_zauberin",
"icon": "🪄", "icon": "🪄",
"name": "Funktions-Zauberin", "name": "Funktions-Zauberin",
"desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).", "desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": ["g06_funktionen_und_module"] "kriterium": ["lehrpfad_1_grundlagen/06_funktionen_und_module"]
}, },
"listen_archivarin": { "listen_archivarin": {
"id": "listen_archivarin", "id": "listen_archivarin",
"icon": "📋", "icon": "📋",
"name": "Listen-Archivarin", "name": "Listen-Archivarin",
"desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).", "desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).",
"xp_bonus": 120, "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": { "daten_strategin": {
"id": "daten_strategin", "id": "daten_strategin",
"icon": "🗃️", "icon": "🗃️",
"name": "Daten-Strategin", "name": "Daten-Strategin",
"desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", "desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).",
"xp_bonus": 150, "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": { "bug_jaegerin": {
"id": "bug_jaegerin", "id": "bug_jaegerin",
@ -99,7 +108,7 @@ BADGES_KATALOG = {
"name": "Bug-Jägerin", "name": "Bug-Jägerin",
"desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).", "desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": ["00_fehlersuche_und_grundlagen"] "kriterium": ["lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen"]
}, },
"erste_architektin": { "erste_architektin": {
"id": "erste_architektin", "id": "erste_architektin",
@ -107,7 +116,11 @@ BADGES_KATALOG = {
"name": "Erste Architektin", "name": "Erste Architektin",
"desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).", "desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).",
"xp_bonus": 200, "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": { "tamagotchi_mama": {
"id": "tamagotchi_mama", "id": "tamagotchi_mama",
@ -115,7 +128,7 @@ BADGES_KATALOG = {
"name": "Tamagotchi-Mama", "name": "Tamagotchi-Mama",
"desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).", "desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).",
"xp_bonus": 250, "xp_bonus": 250,
"kriterium": ["06_abschlussprojekt_tamagotchi"] "kriterium": ["lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi"]
}, },
"zeit_reisende": { "zeit_reisende": {
"id": "zeit_reisende", "id": "zeit_reisende",
@ -123,7 +136,7 @@ BADGES_KATALOG = {
"name": "Git-Zeitreisende", "name": "Git-Zeitreisende",
"desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.", "desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.",
"xp_bonus": 100, "xp_bonus": 100,
"kriterium": ["04_str_und_darstellung"] "kriterium": ["lehrpfad_2_oop_einstieg/04_str_und_darstellung"]
}, },
"qualitaets_garantin": { "qualitaets_garantin": {
"id": "qualitaets_garantin", "id": "qualitaets_garantin",
@ -131,7 +144,7 @@ BADGES_KATALOG = {
"name": "TDD-Qualitätsgarantin", "name": "TDD-Qualitätsgarantin",
"desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).", "desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).",
"xp_bonus": 200, "xp_bonus": 200,
"kriterium": ["09_eigene_unit_tests_schreiben"] "kriterium": ["lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben"]
}, },
"oop_grossmeisterin": { "oop_grossmeisterin": {
"id": "oop_grossmeisterin", "id": "oop_grossmeisterin",
@ -139,7 +152,11 @@ BADGES_KATALOG = {
"name": "Vererbungs-Koryphäe", "name": "Vererbungs-Koryphäe",
"desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).", "desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).",
"xp_bonus": 300, "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": { "software_architektin": {
"id": "software_architektin", "id": "software_architektin",
@ -147,7 +164,7 @@ BADGES_KATALOG = {
"name": "Meister-Entwicklerin", "name": "Meister-Entwicklerin",
"desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!", "desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!",
"xp_bonus": 500, "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 = [] neu_freigeschaltet_badges = []
for badge_id, badge in BADGES_KATALOG.items(): for badge_id, badge in BADGES_KATALOG.items():
kriterien = badge["kriterium"] kriterien = badge["kriterium"]
# Alle Kriterien-Ordner müssen gelöst sein
if all(k in neue_geloeste for k in kriterien): if all(k in neue_geloeste for k in kriterien):
if badge_id not in alte_badges: if badge_id not in alte_badges:
neu_freigeschaltet_badges.append(badge) 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. Wird von einzelnen test_aufgabe.py Skripten aufgerufen, wenn sie direkt ausgeführt werden.
Aktualisiert den Spielstand und gibt motivierendes Feedback im Terminal aus. 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", [])) aktuelle_geloeste = set(gm.state.get("geloeste_kapitel", []))
if tests_erfolgreich and tests_anzahl > 0: if tests_erfolgreich and tests_anzahl > 0:
war_bereits_geloest = kapitel_ordner in aktuelle_geloeste war_bereits_geloest = kapitel_pfad_relativ in aktuelle_geloeste
aktuelle_geloeste.add(kapitel_ordner) aktuelle_geloeste.add(kapitel_pfad_relativ)
# Gesamtbestandene Tests schätzen/updaten # Gesamtbestandene Tests schätzen/updaten
alte_tests = gm.state.get("bestandene_tests", 0) alte_tests = gm.state.get("bestandene_tests", 0)

View file

@ -97,7 +97,7 @@
<div class="roadmap-grid"> <div class="roadmap-grid">
<!-- G01 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G01</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G01</span>
<div class="roadmap-title">🧮 Python als Taschenrechner</div> <div class="roadmap-title">🧮 Python als Taschenrechner</div>
@ -107,7 +107,7 @@
</a> </a>
<!-- G02 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G02</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G02</span>
<div class="roadmap-title">📦 Variablen &amp; Datentypen</div> <div class="roadmap-title">📦 Variablen &amp; Datentypen</div>
@ -117,7 +117,7 @@
</a> </a>
<!-- G03 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G03</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G03</span>
<div class="roadmap-title">💬 Interaktive Ein- &amp; Ausgabe</div> <div class="roadmap-title">💬 Interaktive Ein- &amp; Ausgabe</div>
@ -127,7 +127,7 @@
</a> </a>
<!-- G04 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G04</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G04</span>
<div class="roadmap-title">🚦 Bedingungen &amp; Verzweigungen</div> <div class="roadmap-title">🚦 Bedingungen &amp; Verzweigungen</div>
@ -137,7 +137,7 @@
</a> </a>
<!-- G05 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G05</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G05</span>
<div class="roadmap-title">🎡 Schleifen &amp; Wiederholungen</div> <div class="roadmap-title">🎡 Schleifen &amp; Wiederholungen</div>
@ -147,7 +147,7 @@
</a> </a>
<!-- G06 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G06</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G06</span>
<div class="roadmap-title">🪄 Eigene Funktionen &amp; Module</div> <div class="roadmap-title">🪄 Eigene Funktionen &amp; Module</div>
@ -157,7 +157,7 @@
</a> </a>
<!-- G07 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G07</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G07</span>
<div class="roadmap-title">📋 Listen &amp; Sequenzen</div> <div class="roadmap-title">📋 Listen &amp; Sequenzen</div>
@ -167,7 +167,7 @@
</a> </a>
<!-- G08 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G08</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G08</span>
<div class="roadmap-title">🔤 Textverarbeitung &amp; Strings</div> <div class="roadmap-title">🔤 Textverarbeitung &amp; Strings</div>
@ -177,7 +177,7 @@
</a> </a>
<!-- G09 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G09</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G09</span>
<div class="roadmap-title">🗃️ Dictionaries &amp; Sets</div> <div class="roadmap-title">🗃️ Dictionaries &amp; Sets</div>
@ -187,7 +187,7 @@
</a> </a>
<!-- G10 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G10</span> <span class="roadmap-number" style="background: #dbeafe; color: #1e40af;">Grundlagen G10</span>
<div class="roadmap-title">🚀 Comprehensions &amp; Algorithmen</div> <div class="roadmap-title">🚀 Comprehensions &amp; Algorithmen</div>
@ -212,7 +212,7 @@
<div class="roadmap-grid"> <div class="roadmap-grid">
<!-- Kapitel 0 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--purple-light); color: var(--purple);">Warm-up 00</span> <span class="roadmap-number" style="background: var(--purple-light); color: var(--purple);">Warm-up 00</span>
<div class="roadmap-title">🔍 Fehlersuche &amp; Bugs</div> <div class="roadmap-title">🔍 Fehlersuche &amp; Bugs</div>
@ -222,7 +222,7 @@
</a> </a>
<!-- Kapitel 1 --> <!-- 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> <div>
<span class="roadmap-number">Kapitel 01</span> <span class="roadmap-number">Kapitel 01</span>
<div class="roadmap-title">🐶 Die erste Klasse</div> <div class="roadmap-title">🐶 Die erste Klasse</div>
@ -232,7 +232,7 @@
</a> </a>
<!-- Kapitel 2 --> <!-- 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> <div>
<span class="roadmap-number">Kapitel 02</span> <span class="roadmap-number">Kapitel 02</span>
<div class="roadmap-title">💳 Konstruktor & self</div> <div class="roadmap-title">💳 Konstruktor & self</div>
@ -242,7 +242,7 @@
</a> </a>
<!-- Kapitel 3 --> <!-- 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> <div>
<span class="roadmap-number">Kapitel 03</span> <span class="roadmap-number">Kapitel 03</span>
<div class="roadmap-title">⚔️ Methoden & Verhalten</div> <div class="roadmap-title">⚔️ Methoden & Verhalten</div>
@ -252,7 +252,7 @@
</a> </a>
<!-- Kapitel 4 --> <!-- 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> <div>
<span class="roadmap-number">Kapitel 04</span> <span class="roadmap-number">Kapitel 04</span>
<div class="roadmap-title">🧾 Schöne Textausgabe</div> <div class="roadmap-title">🧾 Schöne Textausgabe</div>
@ -262,7 +262,7 @@
</a> </a>
<!-- Kapitel 4b --> <!-- 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> <div>
<span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Exkurs 04b</span> <span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Exkurs 04b</span>
<div class="roadmap-title">🚀 Installation &amp; Setup VS Code</div> <div class="roadmap-title">🚀 Installation &amp; Setup VS Code</div>
@ -272,7 +272,7 @@
</a> </a>
<!-- Kapitel 4c (Git) --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Exkurs 04c</span> <span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Exkurs 04c</span>
<div class="roadmap-title">🌿 Git &amp; Versionskontrolle</div> <div class="roadmap-title">🌿 Git &amp; Versionskontrolle</div>
@ -282,7 +282,7 @@
</a> </a>
<!-- Kapitel 5 --> <!-- 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> <div>
<span class="roadmap-number">Kapitel 05</span> <span class="roadmap-number">Kapitel 05</span>
<div class="roadmap-title">🎵 Assoziation & Komposition</div> <div class="roadmap-title">🎵 Assoziation & Komposition</div>
@ -292,7 +292,7 @@
</a> </a>
<!-- Kapitel 6 --> <!-- 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> <div>
<span class="roadmap-number">Kapitel 06</span> <span class="roadmap-number">Kapitel 06</span>
<div class="roadmap-title">🥚 Mini-Projekt: Tamagotchi</div> <div class="roadmap-title">🥚 Mini-Projekt: Tamagotchi</div>
@ -317,7 +317,7 @@
<div class="roadmap-grid"> <div class="roadmap-grid">
<!-- Kapitel 7 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Kapitel 07</span> <span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Kapitel 07</span>
<div class="roadmap-title">🌳 Referenzen &amp; Stammbäume</div> <div class="roadmap-title">🌳 Referenzen &amp; Stammbäume</div>
@ -327,7 +327,7 @@
</a> </a>
<!-- Kapitel 8 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Kapitel 08</span> <span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Kapitel 08</span>
<div class="roadmap-title">➕ Operator Overloading &amp; Dunder</div> <div class="roadmap-title">➕ Operator Overloading &amp; Dunder</div>
@ -337,7 +337,7 @@
</a> </a>
<!-- Kapitel 9 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 09</span> <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> <div class="roadmap-title">🧪 Eigene Unit Tests &amp; TDD</div>
@ -347,7 +347,7 @@
</a> </a>
<!-- Kapitel 10 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 10</span> <span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 10</span>
<div class="roadmap-title">🧬 Vererbung &amp; super()</div> <div class="roadmap-title">🧬 Vererbung &amp; super()</div>
@ -357,7 +357,7 @@
</a> </a>
<!-- Kapitel 11 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Kapitel 11</span> <span class="roadmap-number" style="background: #e0f2fe; color: #0284c7;">Kapitel 11</span>
<div class="roadmap-title">🎭 Polymorphie &amp; Interfaces</div> <div class="roadmap-title">🎭 Polymorphie &amp; Interfaces</div>
@ -367,7 +367,7 @@
</a> </a>
<!-- Kapitel 12 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--danger-light); color: var(--danger);">Kapitel 12</span> <span class="roadmap-number" style="background: var(--danger-light); color: var(--danger);">Kapitel 12</span>
<div class="roadmap-title">🛡️ Exceptions &amp; Fehlerbehandlung</div> <div class="roadmap-title">🛡️ Exceptions &amp; Fehlerbehandlung</div>
@ -377,7 +377,7 @@
</a> </a>
<!-- Kapitel 13 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--primary-light); color: var(--primary);">Kapitel 13</span> <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> <div class="roadmap-title">💾 Datei-Persistenz: JSON &amp; CSV</div>
@ -387,7 +387,7 @@
</a> </a>
<!-- Kapitel 14 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--purple-light); color: var(--purple);">Kapitel 14</span> <span class="roadmap-number" style="background: var(--purple-light); color: var(--purple);">Kapitel 14</span>
<div class="roadmap-title">🖥️ Desktop-GUIs mit Tkinter</div> <div class="roadmap-title">🖥️ Desktop-GUIs mit Tkinter</div>
@ -397,7 +397,7 @@
</a> </a>
<!-- Kapitel 15 --> <!-- 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> <div>
<span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Kapitel 15</span> <span class="roadmap-number" style="background: var(--success-light); color: var(--success);">Kapitel 15</span>
<div class="roadmap-title">🎒 Parameter &amp; Eigene Container</div> <div class="roadmap-title">🎒 Parameter &amp; Eigene Container</div>
@ -407,7 +407,7 @@
</a> </a>
<!-- Kapitel 16 --> <!-- 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> <div>
<span class="roadmap-number" style="background: #fef3c7; color: #b45309; font-weight: bold;">🏆 Kapitel 16 &bull; Masterprojekt</span> <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> <div class="roadmap-title">🐾 PetCare &amp; Tierheim-Manager</div>

View file

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

View file

@ -127,9 +127,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -113,9 +113,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G03: Interaktive Ein- & Ausgabe</title> <title>Kapitel G03: Interaktive Ein- & Ausgabe</title>
<link rel="stylesheet" href="../assets/style.css"> <link rel="stylesheet" href="../../assets/style.css">
</head> </head>
<body> <body>
<header> <header>
<div class="header-container"> <div class="header-container">
<nav class="nav-links"> <nav class="nav-links">
<a href="../index.html">🏠 Zur Kursübersicht</a> <a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span> <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>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G03</span> <span style="color: white; font-weight: 600;">Kapitel G03</span>
<span>&rsaquo;</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> </nav>
<div class="header-badge">Grundlagen G03 &bull; Schulabgleich 07.0</div> <div class="header-badge">Grundlagen G03 &bull; Schulabgleich 07.0</div>
<h1>Interaktive Ein- &amp; Ausgabe 💬⌨️</h1> <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>
<div class="footer-nav"> <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="../02_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="../04_verzweigungen_und_bedingungen/index.html" class="btn">Weiter zu Kapitel G04: Verzweigungen &rarr;</a>
</div> </div>
</section> </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://) --> <!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script> <script src="../../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script> <script src="../../assets/gamification.js"></script>
</body> </body>
</html> </html>

View file

@ -145,9 +145,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -160,9 +160,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -178,9 +178,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -167,9 +167,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -123,9 +123,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -97,9 +97,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -142,9 +142,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,20 +4,20 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel G10: Comprehensions, Datum &amp; Algorithmen</title> <title>Kapitel G10: Comprehensions, Datum &amp; Algorithmen</title>
<link rel="stylesheet" href="../assets/style.css"> <link rel="stylesheet" href="../../assets/style.css">
</head> </head>
<body> <body>
<header> <header>
<div class="header-container"> <div class="header-container">
<nav class="nav-links"> <nav class="nav-links">
<a href="../index.html">🏠 Zur Kursübersicht</a> <a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span> <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>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel G10</span> <span style="color: white; font-weight: 600;">Kapitel G10</span>
<span>&rsaquo;</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> </nav>
<div class="header-badge">Kapitel G10 &bull; Schulabgleich 13.0 &amp; 15.1</div> <div class="header-badge">Kapitel G10 &bull; Schulabgleich 13.0 &amp; 15.1</div>
<h1>Comprehensions, Datum &amp; Algorithmen 🚀📅</h1> <h1>Comprehensions, Datum &amp; Algorithmen 🚀📅</h1>
@ -244,8 +244,8 @@
</div> </div>
<div class="footer-nav"> <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="../09_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="../../lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html" class="btn">Weiter zu Lehrpfad 2: OOP &amp; Klassen &rarr;</a>
</div> </div>
</section> </section>
@ -253,7 +253,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) --> <!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script> <script src="../../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script> <script src="../../assets/gamification.js"></script>
</body> </body>
</html> </html>

View file

@ -143,9 +143,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

@ -4,14 +4,14 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 00: Fehlersuche & Grundlagen</title> <title>Kapitel 00: Fehlersuche & Grundlagen</title>
<link rel="stylesheet" href="../assets/style.css"> <link rel="stylesheet" href="../../assets/style.css">
</head> </head>
<body> <body>
<header> <header>
<div class="header-container"> <div class="header-container">
<nav class="nav-links"> <nav class="nav-links">
<a href="../index.html">🏠 Zur Kursübersicht</a> <a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span> <span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel 00</span> <span style="color: white; font-weight: 600;">Kapitel 00</span>
<span>&rsaquo;</span> <span>&rsaquo;</span>
@ -198,7 +198,7 @@
</div> </div>
<div class="footer-nav"> <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> <a href="../01_einstieg_klassen/index.html" class="btn">Weiter zu Kapitel 01: Klassen &rarr;</a>
</div> </div>
</section> </section>
@ -207,7 +207,7 @@
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) --> <!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../assets/gamification_data.js"></script> <script src="../../assets/gamification_data.js"></script>
<script src="../assets/gamification.js"></script> <script src="../../assets/gamification.js"></script>
</body> </body>
</html> </html>

View file

@ -63,9 +63,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -84,9 +84,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -85,9 +85,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -101,9 +101,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -68,9 +68,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

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

View file

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

View file

@ -87,9 +87,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

View file

@ -111,9 +111,11 @@ if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False) res = unittest.main(verbosity=2, exit=False)
try: try:
from pathlib import Path 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 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: except Exception:
pass pass
sys.exit(0 if res.result.wasSuccessful() else 1) sys.exit(0 if res.result.wasSuccessful() else 1)

View file

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

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