From e74c243259a0e827c857b3ccc4351f093900d71a Mon Sep 17 00:00:00 2001 From: Alex Mueller Date: Sat, 29 Aug 2026 15:07:16 +0200 Subject: [PATCH] Restrukturiere Verzeichnisstruktur in 3 saubere Lehrpfad-Ordner (lehrpfad_1_grundlagen, lehrpfad_2_oop_einstieg, lehrpfad_3_fortgeschrittenes_oop) --- .gamification.json | 2 +- README.md | 58 ++++++++-------- assets/gamification_data.js | 58 ++++++++-------- gamification.py | 68 ++++++++++++------- index.html | 58 ++++++++-------- .../README.md | 0 .../aufgabe.py | 0 .../index.html | 14 ++-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../02_variablen_und_datentypen}/README.md | 0 .../02_variablen_und_datentypen}/aufgabe.py | 0 .../02_variablen_und_datentypen}/index.html | 16 ++--- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../03_ein_und_ausgabe}/README.md | 0 .../03_ein_und_ausgabe}/aufgabe.py | 0 .../03_ein_und_ausgabe}/index.html | 16 ++--- .../03_ein_und_ausgabe}/musterloesung.py | 0 .../03_ein_und_ausgabe}/test_aufgabe.py | 6 +- .../README.md | 0 .../aufgabe.py | 0 .../index.html | 16 ++--- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../README.md | 0 .../aufgabe.py | 0 .../index.html | 16 ++--- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../06_funktionen_und_module}/README.md | 0 .../06_funktionen_und_module}/aufgabe.py | 0 .../06_funktionen_und_module}/index.html | 16 ++--- .../musterloesung.py | 0 .../06_funktionen_und_module}/test_aufgabe.py | 6 +- .../07_listen_und_sequenzen}/README.md | 0 .../07_listen_und_sequenzen}/aufgabe.py | 0 .../07_listen_und_sequenzen}/index.html | 14 ++-- .../07_listen_und_sequenzen}/musterloesung.py | 0 .../07_listen_und_sequenzen}/test_aufgabe.py | 6 +- .../README.md | 0 .../aufgabe.py | 0 .../index.html | 14 ++-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../09_dictionaries_und_sets}/README.md | 0 .../09_dictionaries_und_sets}/aufgabe.py | 0 .../09_dictionaries_und_sets}/index.html | 16 ++--- .../musterloesung.py | 0 .../09_dictionaries_und_sets}/test_aufgabe.py | 6 +- .../README.md | 0 .../aufgabe.py | 0 .../index.html | 16 ++--- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../00_fehlersuche_und_grundlagen}/README.md | 0 .../00_fehlersuche_und_grundlagen}/aufgabe.py | 0 .../00_fehlersuche_und_grundlagen}/index.html | 10 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../01_einstieg_klassen}/README.md | 0 .../01_einstieg_klassen}/aufgabe.py | 0 .../01_einstieg_klassen}/index.html | 8 +-- .../01_einstieg_klassen}/musterloesung.py | 0 .../01_einstieg_klassen}/test_aufgabe.py | 6 +- .../02_init_und_self}/README.md | 0 .../02_init_und_self}/aufgabe.py | 0 .../02_init_und_self}/index.html | 8 +-- .../02_init_und_self}/musterloesung.py | 0 .../02_init_und_self}/test_aufgabe.py | 6 +- .../03_methoden_und_verhalten}/README.md | 0 .../03_methoden_und_verhalten}/aufgabe.py | 0 .../03_methoden_und_verhalten}/index.html | 8 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../04_str_und_darstellung}/README.md | 0 .../04_str_und_darstellung}/aufgabe.py | 0 .../04_str_und_darstellung}/index.html | 8 +-- .../04_str_und_darstellung}/musterloesung.py | 0 .../04_str_und_darstellung}/test_aufgabe.py | 6 +- .../04b_umstieg_vscode}/README.md | 0 .../04b_umstieg_vscode}/index.html | 8 +-- .../04b_umstieg_vscode}/vscode_test.py | 0 .../04c_git_und_versionskontrolle}/README.md | 0 .../git_uebung.py | 0 .../04c_git_und_versionskontrolle}/index.html | 8 +-- .../05_objekte_kombinieren}/README.md | 0 .../05_objekte_kombinieren}/aufgabe.py | 0 .../05_objekte_kombinieren}/index.html | 8 +-- .../05_objekte_kombinieren}/musterloesung.py | 0 .../05_objekte_kombinieren}/test_aufgabe.py | 6 +- .../06_abschlussprojekt_tamagotchi}/README.md | 0 .../aufgabe.py | 0 .../index.html | 10 +-- .../musterloesung.py | 0 .../tamagotchi_spiel.py | 0 .../test_aufgabe.py | 6 +- .../07_referenzen_und_speicher}/README.md | 0 .../07_referenzen_und_speicher}/aufgabe.py | 0 .../07_referenzen_und_speicher}/index.html | 12 ++-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../08_operator_overloading_dunder}/README.md | 0 .../aufgabe.py | 0 .../index.html | 8 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../09_eigene_unit_tests_schreiben}/README.md | 0 .../aufgabe.py | 0 .../index.html | 8 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../10_vererbung_und_super}/README.md | 0 .../10_vererbung_und_super}/aufgabe.py | 0 .../10_vererbung_und_super}/index.html | 8 +-- .../10_vererbung_und_super}/musterloesung.py | 0 .../10_vererbung_und_super}/test_aufgabe.py | 6 +- .../11_polymorphie_und_interfaces}/README.md | 0 .../11_polymorphie_und_interfaces}/aufgabe.py | 0 .../11_polymorphie_und_interfaces}/index.html | 8 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../README.md | 0 .../aufgabe.py | 0 .../index.html | 8 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../13_persistenz_json_und_csv}/README.md | 0 .../13_persistenz_json_und_csv}/aufgabe.py | 0 .../13_persistenz_json_und_csv}/index.html | 8 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../14_gui_mit_tkinter}/README.md | 0 .../14_gui_mit_tkinter}/aufgabe.py | 0 .../14_gui_mit_tkinter}/gui_app.py | 0 .../14_gui_mit_tkinter}/index.html | 10 +-- .../14_gui_mit_tkinter}/musterloesung.py | 0 .../14_gui_mit_tkinter}/test_aufgabe.py | 6 +- .../15_parameter_und_container}/README.md | 0 .../15_parameter_und_container}/aufgabe.py | 0 .../15_parameter_und_container}/index.html | 10 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- .../16_master_abschlussprojekt}/README.md | 0 .../16_master_abschlussprojekt}/app.py | 0 .../16_master_abschlussprojekt}/aufgabe.py | 0 .../16_master_abschlussprojekt}/index.html | 10 +-- .../musterloesung.py | 0 .../test_aufgabe.py | 6 +- test_all.py | 59 ++++++++-------- 150 files changed, 430 insertions(+), 355 deletions(-) rename {g01_erste_schritte_taschenrechner => lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner}/README.md (100%) rename {g01_erste_schritte_taschenrechner => lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner}/aufgabe.py (100%) rename {g01_erste_schritte_taschenrechner => lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner}/index.html (96%) rename {g01_erste_schritte_taschenrechner => lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner}/musterloesung.py (100%) rename {g01_erste_schritte_taschenrechner => lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner}/test_aufgabe.py (95%) rename {g02_variablen_und_datentypen => lehrpfad_1_grundlagen/02_variablen_und_datentypen}/README.md (100%) rename {g02_variablen_und_datentypen => lehrpfad_1_grundlagen/02_variablen_und_datentypen}/aufgabe.py (100%) rename {g02_variablen_und_datentypen => lehrpfad_1_grundlagen/02_variablen_und_datentypen}/index.html (95%) rename {g02_variablen_und_datentypen => lehrpfad_1_grundlagen/02_variablen_und_datentypen}/musterloesung.py (100%) rename {g02_variablen_und_datentypen => lehrpfad_1_grundlagen/02_variablen_und_datentypen}/test_aufgabe.py (95%) rename {g03_ein_und_ausgabe => lehrpfad_1_grundlagen/03_ein_und_ausgabe}/README.md (100%) rename {g03_ein_und_ausgabe => lehrpfad_1_grundlagen/03_ein_und_ausgabe}/aufgabe.py (100%) rename {g03_ein_und_ausgabe => lehrpfad_1_grundlagen/03_ein_und_ausgabe}/index.html (95%) rename {g03_ein_und_ausgabe => lehrpfad_1_grundlagen/03_ein_und_ausgabe}/musterloesung.py (100%) rename {g03_ein_und_ausgabe => lehrpfad_1_grundlagen/03_ein_und_ausgabe}/test_aufgabe.py (95%) rename {g04_verzweigungen_und_bedingungen => lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen}/README.md (100%) rename {g04_verzweigungen_und_bedingungen => lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen}/aufgabe.py (100%) rename {g04_verzweigungen_und_bedingungen => lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen}/index.html (95%) rename {g04_verzweigungen_und_bedingungen => lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen}/musterloesung.py (100%) rename {g04_verzweigungen_und_bedingungen => lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen}/test_aufgabe.py (96%) rename {g05_schleifen_und_wiederholungen => lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen}/README.md (100%) rename {g05_schleifen_und_wiederholungen => lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen}/aufgabe.py (100%) rename {g05_schleifen_und_wiederholungen => lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen}/index.html (96%) rename {g05_schleifen_und_wiederholungen => lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen}/musterloesung.py (100%) rename {g05_schleifen_und_wiederholungen => lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen}/test_aufgabe.py (95%) rename {g06_funktionen_und_module => lehrpfad_1_grundlagen/06_funktionen_und_module}/README.md (100%) rename {g06_funktionen_und_module => lehrpfad_1_grundlagen/06_funktionen_und_module}/aufgabe.py (100%) rename {g06_funktionen_und_module => lehrpfad_1_grundlagen/06_funktionen_und_module}/index.html (96%) rename {g06_funktionen_und_module => lehrpfad_1_grundlagen/06_funktionen_und_module}/musterloesung.py (100%) rename {g06_funktionen_und_module => lehrpfad_1_grundlagen/06_funktionen_und_module}/test_aufgabe.py (96%) rename {g07_listen_und_sequenzen => lehrpfad_1_grundlagen/07_listen_und_sequenzen}/README.md (100%) rename {g07_listen_und_sequenzen => lehrpfad_1_grundlagen/07_listen_und_sequenzen}/aufgabe.py (100%) rename {g07_listen_und_sequenzen => lehrpfad_1_grundlagen/07_listen_und_sequenzen}/index.html (96%) rename {g07_listen_und_sequenzen => lehrpfad_1_grundlagen/07_listen_und_sequenzen}/musterloesung.py (100%) rename {g07_listen_und_sequenzen => lehrpfad_1_grundlagen/07_listen_und_sequenzen}/test_aufgabe.py (94%) rename {g08_textverarbeitung_und_strings => lehrpfad_1_grundlagen/08_textverarbeitung_und_strings}/README.md (100%) rename {g08_textverarbeitung_und_strings => lehrpfad_1_grundlagen/08_textverarbeitung_und_strings}/aufgabe.py (100%) rename {g08_textverarbeitung_und_strings => lehrpfad_1_grundlagen/08_textverarbeitung_und_strings}/index.html (95%) rename {g08_textverarbeitung_und_strings => lehrpfad_1_grundlagen/08_textverarbeitung_und_strings}/musterloesung.py (100%) rename {g08_textverarbeitung_und_strings => lehrpfad_1_grundlagen/08_textverarbeitung_und_strings}/test_aufgabe.py (94%) rename {g09_dictionaries_und_sets => lehrpfad_1_grundlagen/09_dictionaries_und_sets}/README.md (100%) rename {g09_dictionaries_und_sets => lehrpfad_1_grundlagen/09_dictionaries_und_sets}/aufgabe.py (100%) rename {g09_dictionaries_und_sets => lehrpfad_1_grundlagen/09_dictionaries_und_sets}/index.html (95%) rename {g09_dictionaries_und_sets => lehrpfad_1_grundlagen/09_dictionaries_und_sets}/musterloesung.py (100%) rename {g09_dictionaries_und_sets => lehrpfad_1_grundlagen/09_dictionaries_und_sets}/test_aufgabe.py (95%) rename {g10_comprehensions_datum_algorithmen => lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen}/README.md (100%) rename {g10_comprehensions_datum_algorithmen => lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen}/aufgabe.py (100%) rename {g10_comprehensions_datum_algorithmen => lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen}/index.html (95%) rename {g10_comprehensions_datum_algorithmen => lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen}/musterloesung.py (100%) rename {g10_comprehensions_datum_algorithmen => lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen}/test_aufgabe.py (94%) rename {00_fehlersuche_und_grundlagen => lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen}/README.md (100%) rename {00_fehlersuche_und_grundlagen => lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen}/aufgabe.py (100%) rename {00_fehlersuche_und_grundlagen => lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen}/index.html (96%) rename {00_fehlersuche_und_grundlagen => lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen}/musterloesung.py (100%) rename {00_fehlersuche_und_grundlagen => lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen}/test_aufgabe.py (91%) rename {01_einstieg_klassen => lehrpfad_2_oop_einstieg/01_einstieg_klassen}/README.md (100%) rename {01_einstieg_klassen => lehrpfad_2_oop_einstieg/01_einstieg_klassen}/aufgabe.py (100%) rename {01_einstieg_klassen => lehrpfad_2_oop_einstieg/01_einstieg_klassen}/index.html (98%) rename {01_einstieg_klassen => lehrpfad_2_oop_einstieg/01_einstieg_klassen}/musterloesung.py (100%) rename {01_einstieg_klassen => lehrpfad_2_oop_einstieg/01_einstieg_klassen}/test_aufgabe.py (93%) rename {02_init_und_self => lehrpfad_2_oop_einstieg/02_init_und_self}/README.md (100%) rename {02_init_und_self => lehrpfad_2_oop_einstieg/02_init_und_self}/aufgabe.py (100%) rename {02_init_und_self => lehrpfad_2_oop_einstieg/02_init_und_self}/index.html (98%) rename {02_init_und_self => lehrpfad_2_oop_einstieg/02_init_und_self}/musterloesung.py (100%) rename {02_init_und_self => lehrpfad_2_oop_einstieg/02_init_und_self}/test_aufgabe.py (93%) rename {03_methoden_und_verhalten => lehrpfad_2_oop_einstieg/03_methoden_und_verhalten}/README.md (100%) rename {03_methoden_und_verhalten => lehrpfad_2_oop_einstieg/03_methoden_und_verhalten}/aufgabe.py (100%) rename {03_methoden_und_verhalten => lehrpfad_2_oop_einstieg/03_methoden_und_verhalten}/index.html (98%) rename {03_methoden_und_verhalten => lehrpfad_2_oop_einstieg/03_methoden_und_verhalten}/musterloesung.py (100%) rename {03_methoden_und_verhalten => lehrpfad_2_oop_einstieg/03_methoden_und_verhalten}/test_aufgabe.py (92%) rename {04_str_und_darstellung => lehrpfad_2_oop_einstieg/04_str_und_darstellung}/README.md (100%) rename {04_str_und_darstellung => lehrpfad_2_oop_einstieg/04_str_und_darstellung}/aufgabe.py (100%) rename {04_str_und_darstellung => lehrpfad_2_oop_einstieg/04_str_und_darstellung}/index.html (98%) rename {04_str_und_darstellung => lehrpfad_2_oop_einstieg/04_str_und_darstellung}/musterloesung.py (100%) rename {04_str_und_darstellung => lehrpfad_2_oop_einstieg/04_str_und_darstellung}/test_aufgabe.py (89%) rename {04b_umstieg_vscode => lehrpfad_2_oop_einstieg/04b_umstieg_vscode}/README.md (100%) rename {04b_umstieg_vscode => lehrpfad_2_oop_einstieg/04b_umstieg_vscode}/index.html (98%) rename {04b_umstieg_vscode => lehrpfad_2_oop_einstieg/04b_umstieg_vscode}/vscode_test.py (100%) rename {04c_git_und_versionskontrolle => lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle}/README.md (100%) rename {04c_git_und_versionskontrolle => lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle}/git_uebung.py (100%) rename {04c_git_und_versionskontrolle => lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle}/index.html (97%) rename {05_objekte_kombinieren => lehrpfad_2_oop_einstieg/05_objekte_kombinieren}/README.md (100%) rename {05_objekte_kombinieren => lehrpfad_2_oop_einstieg/05_objekte_kombinieren}/aufgabe.py (100%) rename {05_objekte_kombinieren => lehrpfad_2_oop_einstieg/05_objekte_kombinieren}/index.html (98%) rename {05_objekte_kombinieren => lehrpfad_2_oop_einstieg/05_objekte_kombinieren}/musterloesung.py (100%) rename {05_objekte_kombinieren => lehrpfad_2_oop_einstieg/05_objekte_kombinieren}/test_aufgabe.py (91%) rename {06_abschlussprojekt_tamagotchi => lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi}/README.md (100%) rename {06_abschlussprojekt_tamagotchi => lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi}/aufgabe.py (100%) rename {06_abschlussprojekt_tamagotchi => lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi}/index.html (96%) rename {06_abschlussprojekt_tamagotchi => lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi}/musterloesung.py (100%) rename {06_abschlussprojekt_tamagotchi => lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi}/tamagotchi_spiel.py (100%) rename {06_abschlussprojekt_tamagotchi => lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi}/test_aufgabe.py (93%) rename {07_referenzen_und_speicher => lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher}/README.md (100%) rename {07_referenzen_und_speicher => lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher}/aufgabe.py (100%) rename {07_referenzen_und_speicher => lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher}/index.html (96%) rename {07_referenzen_und_speicher => lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher}/musterloesung.py (100%) rename {07_referenzen_und_speicher => lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher}/test_aufgabe.py (92%) rename {08_operator_overloading_dunder => lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder}/README.md (100%) rename {08_operator_overloading_dunder => lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder}/aufgabe.py (100%) rename {08_operator_overloading_dunder => lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder}/index.html (98%) rename {08_operator_overloading_dunder => lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder}/musterloesung.py (100%) rename {08_operator_overloading_dunder => lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder}/test_aufgabe.py (95%) rename {09_eigene_unit_tests_schreiben => lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben}/README.md (100%) rename {09_eigene_unit_tests_schreiben => lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben}/aufgabe.py (100%) rename {09_eigene_unit_tests_schreiben => lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben}/index.html (98%) rename {09_eigene_unit_tests_schreiben => lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben}/musterloesung.py (100%) rename {09_eigene_unit_tests_schreiben => lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben}/test_aufgabe.py (96%) rename {10_vererbung_und_super => lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super}/README.md (100%) rename {10_vererbung_und_super => lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super}/aufgabe.py (100%) rename {10_vererbung_und_super => lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super}/index.html (98%) rename {10_vererbung_und_super => lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super}/musterloesung.py (100%) rename {10_vererbung_und_super => lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super}/test_aufgabe.py (96%) rename {11_polymorphie_und_interfaces => lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces}/README.md (100%) rename {11_polymorphie_und_interfaces => lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces}/aufgabe.py (100%) rename {11_polymorphie_und_interfaces => lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces}/index.html (98%) rename {11_polymorphie_und_interfaces => lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces}/musterloesung.py (100%) rename {11_polymorphie_und_interfaces => lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces}/test_aufgabe.py (96%) rename {12_exceptions_und_fehlerbehandlung => lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung}/README.md (100%) rename {12_exceptions_und_fehlerbehandlung => lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung}/aufgabe.py (100%) rename {12_exceptions_und_fehlerbehandlung => lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung}/index.html (98%) rename {12_exceptions_und_fehlerbehandlung => lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung}/musterloesung.py (100%) rename {12_exceptions_und_fehlerbehandlung => lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung}/test_aufgabe.py (96%) rename {13_persistenz_json_und_csv => lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv}/README.md (100%) rename {13_persistenz_json_und_csv => lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv}/aufgabe.py (100%) rename {13_persistenz_json_und_csv => lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv}/index.html (98%) rename {13_persistenz_json_und_csv => lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv}/musterloesung.py (100%) rename {13_persistenz_json_und_csv => lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv}/test_aufgabe.py (95%) rename {14_gui_mit_tkinter => lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter}/README.md (100%) rename {14_gui_mit_tkinter => lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter}/aufgabe.py (100%) rename {14_gui_mit_tkinter => lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter}/gui_app.py (100%) rename {14_gui_mit_tkinter => lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter}/index.html (98%) rename {14_gui_mit_tkinter => lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter}/musterloesung.py (100%) rename {14_gui_mit_tkinter => lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter}/test_aufgabe.py (97%) rename {15_parameter_und_container => lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container}/README.md (100%) rename {15_parameter_und_container => lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container}/aufgabe.py (100%) rename {15_parameter_und_container => lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container}/index.html (98%) rename {15_parameter_und_container => lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container}/musterloesung.py (100%) rename {15_parameter_und_container => lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container}/test_aufgabe.py (98%) rename {16_master_abschlussprojekt => lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt}/README.md (100%) rename {16_master_abschlussprojekt => lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt}/app.py (100%) rename {16_master_abschlussprojekt => lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt}/aufgabe.py (100%) rename {16_master_abschlussprojekt => lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt}/index.html (98%) rename {16_master_abschlussprojekt => lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt}/musterloesung.py (100%) rename {16_master_abschlussprojekt => lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt}/test_aufgabe.py (98%) diff --git a/.gamification.json b/.gamification.json index b7035af..1db9ac9 100644 --- a/.gamification.json +++ b/.gamification.json @@ -10,5 +10,5 @@ "streak_tage": 1, "letzter_aktiver_tag": "2026-08-29", "historie": [], - "zuletzt_aktualisiert": "2026-08-29T14:53:37.686061" + "zuletzt_aktualisiert": "2026-08-29T15:07:09.451191" } \ No newline at end of file diff --git a/README.md b/README.md index 69523ba..9e34636 100644 --- a/README.md +++ b/README.md @@ -35,47 +35,47 @@ Das Lernportal besitzt ein wissenschaftlich fundiertes Gamification-System (Self ### 🛣️ Lehrpfad 1: Grundlagen der Programmierung (Prozedural & Datenstrukturen) | Modul | Titel | Themenschwerpunkte | | :--- | :--- | :--- | -| **[G01. Taschenrechner](./g01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` | -| **[G02. Variablen & Typen](./g02_variablen_und_datentypen/)** | **Datentypen** | Speicherboxen, `int`, `float`, `str`, `bool`, Type Casting & Type Hints | -| **[G03. Ein- & Ausgabe](./g03_ein_und_ausgabe/)** | **Interaktion** | Tastatureingaben mit `input()`, f-Strings mit Formatierungs-Codes (`{preis:.2f} €`) | -| **[G04. Bedingungen](./g04_verzweigungen_und_bedingungen/)** | **Entscheidungen** | `if`, `elif`, `else`, Vergleichsoperatoren & Logik (`and`, `or`, `not`) | -| **[G05. Schleifen](./g05_schleifen_und_wiederholungen/)** | **Wiederholungen** | Zählschleifen mit `for in range()`, Bedingungsschleifen mit `while`, `break`/`continue` | -| **[G06. Funktionen](./g06_funktionen_und_module/)** | **Modularität** | `def`, `return`, Parameter, Scope & Module (`math`, `random`) | -| **[G07. Listen & Sequenzen](./g07_listen_und_sequenzen/)** | **Datenstrukturen 1** | Listen erstellen, Indexing, Slicing `[1:4]`, Methoden (`append`, `pop`) & `sum/min/max` | -| **[G08. Textverarbeitung](./g08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse | -| **[G09. Dictionaries & Sets](./g09_dictionaries_und_sets/)** | **Datenstrukturen 2** | Key-Value Paare (`{key: val}`), sicheres `.get()`, Mengen (`set`) ohne Duplikate | -| **[G10. Comprehensions & Datum](./g10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen | +| **[G01. Taschenrechner](./lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` | +| **[G02. Variablen & Typen](./lehrpfad_1_grundlagen/02_variablen_und_datentypen/)** | **Datentypen** | Speicherboxen, `int`, `float`, `str`, `bool`, Type Casting & Type Hints | +| **[G03. Ein- & Ausgabe](./lehrpfad_1_grundlagen/03_ein_und_ausgabe/)** | **Interaktion** | Tastatureingaben mit `input()`, f-Strings mit Formatierungs-Codes (`{preis:.2f} €`) | +| **[G04. Bedingungen](./lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/)** | **Entscheidungen** | `if`, `elif`, `else`, Vergleichsoperatoren & Logik (`and`, `or`, `not`) | +| **[G05. Schleifen](./lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/)** | **Wiederholungen** | Zählschleifen mit `for in range()`, Bedingungsschleifen mit `while`, `break`/`continue` | +| **[G06. Funktionen](./lehrpfad_1_grundlagen/06_funktionen_und_module/)** | **Modularität** | `def`, `return`, Parameter, Scope & Module (`math`, `random`) | +| **[G07. Listen & Sequenzen](./lehrpfad_1_grundlagen/07_listen_und_sequenzen/)** | **Datenstrukturen 1** | Listen erstellen, Indexing, Slicing `[1:4]`, Methoden (`append`, `pop`) & `sum/min/max` | +| **[G08. Textverarbeitung](./lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse | +| **[G09. Dictionaries & Sets](./lehrpfad_1_grundlagen/09_dictionaries_und_sets/)** | **Datenstrukturen 2** | Key-Value Paare (`{key: val}`), sicheres `.get()`, Mengen (`set`) ohne Duplikate | +| **[G10. Comprehensions & Datum](./lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen | --- ### 🛣️ Lehrpfad 2: Einstieg in die Objektorientierung (OOP) & Entwickler-Tools | Modul | Titel | Themenschwerpunkte | | :--- | :--- | :--- | -| **[00. Fehlersuche](./00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` | -| **[01. Einstieg in Klassen](./01_einstieg_klassen/)** | **Bauplan vs. Objekt** | Klassen definieren, Instanziierung, Punktnotation & Type Hints (`Fahrrad`) | -| **[02. Konstruktor & self](./02_init_und_self/)** | **Initialisierung & UML** | `__init__`, `self`, Startwerte & UML-Klassendiagramme (`Bankkonto`, `Smartphone`) | -| **[03. Methoden & Verhalten](./03_methoden_und_verhalten/)** | **Objekt-Interaktion** | Methoden definieren, Rückgabewerte & Duell zweier Objekte (`Rennauto`) | -| **[04. Schöne Textausgabe](./04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) | -| **[04b. VS Code Installation](./04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts | -| **[04c. Git & Versionskontrolle](./04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push | -| **[05. Objekte kombinieren](./05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) | -| **[06. Mini-Projekt OOP 1](./06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal | +| **[00. Fehlersuche](./lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` | +| **[01. Einstieg in Klassen](./lehrpfad_2_oop_einstieg/01_einstieg_klassen/)** | **Bauplan vs. Objekt** | Klassen definieren, Instanziierung, Punktnotation & Type Hints (`Fahrrad`) | +| **[02. Konstruktor & self](./lehrpfad_2_oop_einstieg/02_init_und_self/)** | **Initialisierung & UML** | `__init__`, `self`, Startwerte & UML-Klassendiagramme (`Bankkonto`, `Smartphone`) | +| **[03. Methoden & Verhalten](./lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/)** | **Objekt-Interaktion** | Methoden definieren, Rückgabewerte & Duell zweier Objekte (`Rennauto`) | +| **[04. Schöne Textausgabe](./lehrpfad_2_oop_einstieg/04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) | +| **[04b. VS Code Installation](./lehrpfad_2_oop_einstieg/04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts | +| **[04c. Git & Versionskontrolle](./lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push | +| **[05. Objekte kombinieren](./lehrpfad_2_oop_einstieg/05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) | +| **[06. Mini-Projekt OOP 1](./lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal | --- ### 🛣️ Lehrpfad 3: Fortgeschrittenes OOP, Softwarequalität & Desktop-GUIs | Modul | Titel | Themenschwerpunkte | | :--- | :--- | :--- | -| **[07. Referenzen & Speicher](./07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) | -| **[08. Operator Overloading](./08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) | -| **[09. Eigene Unit Tests & TDD](./09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD | -| **[10. Vererbung & `super()`](./10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte | -| **[11. Polymorphie & Interfaces](./11_polymorphie_und_interfaces/)** | **Polymorphism** | Duck Typing, abstrakte Basisklassen (`ABC`) & Geometrie-Engine | -| **[12. Exceptions & Fehler](./12_exceptions_und_fehlerbehandlung/)** | **Robustes Coding** | `try-except-else-finally`, `raise`, eigene Exception-Klassen im Banking | -| **[13. Datei-Persistenz](./13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export | -| **[14. Desktop-GUIs mit Tkinter](./14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur | -| **[15. Parameter & Container](./15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) | -| **[16. Master-Abschlussprojekt](./16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI | +| **[07. Referenzen & Speicher](./lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) | +| **[08. Operator Overloading](./lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) | +| **[09. Eigene Unit Tests & TDD](./lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD | +| **[10. Vererbung & `super()`](./lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte | +| **[11. Polymorphie & Interfaces](./lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces/)** | **Polymorphism** | Duck Typing, abstrakte Basisklassen (`ABC`) & Geometrie-Engine | +| **[12. Exceptions & Fehler](./lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung/)** | **Robustes Coding** | `try-except-else-finally`, `raise`, eigene Exception-Klassen im Banking | +| **[13. Datei-Persistenz](./lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export | +| **[14. Desktop-GUIs mit Tkinter](./lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur | +| **[15. Parameter & Container](./lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) | +| **[16. Master-Abschlussprojekt](./lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI | --- diff --git a/assets/gamification_data.js b/assets/gamification_data.js index 819dd2a..fb17f95 100644 --- a/assets/gamification_data.js +++ b/assets/gamification_data.js @@ -11,80 +11,80 @@ window.GAMIFICATION_DATA = { "streak_tage": 1, "letzter_aktiver_tag": "2026-08-29", "historie": [], - "zuletzt_aktualisiert": "2026-08-29T14:53:37.686061" + "zuletzt_aktualisiert": "2026-08-29T15:07:09.451191" }; window.GAMIFICATION_BADGES_KATALOG = { "rechenkonegin": { "id": "rechenkonegin", "icon": "🧮", "name": "Rechenkönigin", - "desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", + "desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", "xp_bonus": 100, "kriterium": [ - "g01_erste_schritte_taschenrechner", - "g02_variablen_und_datentypen" + "lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner", + "lehrpfad_1_grundlagen/02_variablen_und_datentypen" ] }, "dialog_profi": { "id": "dialog_profi", "icon": "💬", "name": "Dialog-Profi", - "desc": "Grundlagen G03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", + "desc": "Grundlagen 03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", "xp_bonus": 75, "kriterium": [ - "g03_ein_und_ausgabe" + "lehrpfad_1_grundlagen/03_ein_und_ausgabe" ] }, "weichenstellerin": { "id": "weichenstellerin", "icon": "🚦", "name": "Weichenstellerin", - "desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", + "desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", "xp_bonus": 75, "kriterium": [ - "g04_verzweigungen_und_bedingungen" + "lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen" ] }, "schleifen_dompteurin": { "id": "schleifen_dompteurin", "icon": "🎡", "name": "Schleifen-Dompteurin", - "desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).", + "desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).", "xp_bonus": 100, "kriterium": [ - "g05_schleifen_und_wiederholungen" + "lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen" ] }, "funktions_zauberin": { "id": "funktions_zauberin", "icon": "🪄", "name": "Funktions-Zauberin", - "desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).", + "desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).", "xp_bonus": 100, "kriterium": [ - "g06_funktionen_und_module" + "lehrpfad_1_grundlagen/06_funktionen_und_module" ] }, "listen_archivarin": { "id": "listen_archivarin", "icon": "📋", "name": "Listen-Archivarin", - "desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).", + "desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).", "xp_bonus": 120, "kriterium": [ - "g07_listen_und_sequenzen", - "g08_textverarbeitung_und_strings" + "lehrpfad_1_grundlagen/07_listen_und_sequenzen", + "lehrpfad_1_grundlagen/08_textverarbeitung_und_strings" ] }, "daten_strategin": { "id": "daten_strategin", "icon": "🗃️", "name": "Daten-Strategin", - "desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", + "desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", "xp_bonus": 150, "kriterium": [ - "g09_dictionaries_und_sets", - "g10_comprehensions_datum_algorithmen" + "lehrpfad_1_grundlagen/09_dictionaries_und_sets", + "lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen" ] }, "bug_jaegerin": { @@ -94,7 +94,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).", "xp_bonus": 100, "kriterium": [ - "00_fehlersuche_und_grundlagen" + "lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen" ] }, "erste_architektin": { @@ -104,9 +104,9 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).", "xp_bonus": 200, "kriterium": [ - "01_einstieg_klassen", - "02_init_und_self", - "03_methoden_und_verhalten" + "lehrpfad_2_oop_einstieg/01_einstieg_klassen", + "lehrpfad_2_oop_einstieg/02_init_und_self", + "lehrpfad_2_oop_einstieg/03_methoden_und_verhalten" ] }, "tamagotchi_mama": { @@ -116,7 +116,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).", "xp_bonus": 250, "kriterium": [ - "06_abschlussprojekt_tamagotchi" + "lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi" ] }, "zeit_reisende": { @@ -126,7 +126,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.", "xp_bonus": 100, "kriterium": [ - "04_str_und_darstellung" + "lehrpfad_2_oop_einstieg/04_str_und_darstellung" ] }, "qualitaets_garantin": { @@ -136,7 +136,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).", "xp_bonus": 200, "kriterium": [ - "09_eigene_unit_tests_schreiben" + "lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben" ] }, "oop_grossmeisterin": { @@ -146,9 +146,9 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).", "xp_bonus": 300, "kriterium": [ - "10_vererbung_und_super", - "11_polymorphie_und_interfaces", - "12_exceptions_und_fehlerbehandlung" + "lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super", + "lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces", + "lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung" ] }, "software_architektin": { @@ -158,7 +158,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!", "xp_bonus": 500, "kriterium": [ - "16_master_abschlussprojekt" + "lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt" ] } }; diff --git a/gamification.py b/gamification.py index 637be44..a39002a 100644 --- a/gamification.py +++ b/gamification.py @@ -35,63 +35,72 @@ LEVEL_STUFEN = [ {"level": 10, "min_xp": 6801, "max_xp": 99999, "titel": "Software-Architektin 🏆", "rang": "Großmeisterin"}, ] -# 14 freischaltbare Trophäen mit didaktischen Kriterien +# 14 freischaltbare Trophäen mit didaktischen Kriterien (abgestimmt auf neue Lehrpfad-Pfade) BADGES_KATALOG = { "rechenkonegin": { "id": "rechenkonegin", "icon": "🧮", "name": "Rechenkönigin", - "desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", + "desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", "xp_bonus": 100, - "kriterium": ["g01_erste_schritte_taschenrechner", "g02_variablen_und_datentypen"] + "kriterium": [ + "lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner", + "lehrpfad_1_grundlagen/02_variablen_und_datentypen" + ] }, "dialog_profi": { "id": "dialog_profi", "icon": "💬", "name": "Dialog-Profi", - "desc": "Grundlagen G03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", + "desc": "Grundlagen 03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", "xp_bonus": 75, - "kriterium": ["g03_ein_und_ausgabe"] + "kriterium": ["lehrpfad_1_grundlagen/03_ein_und_ausgabe"] }, "weichenstellerin": { "id": "weichenstellerin", "icon": "🚦", "name": "Weichenstellerin", - "desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", + "desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", "xp_bonus": 75, - "kriterium": ["g04_verzweigungen_und_bedingungen"] + "kriterium": ["lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen"] }, "schleifen_dompteurin": { "id": "schleifen_dompteurin", "icon": "🎡", "name": "Schleifen-Dompteurin", - "desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).", + "desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).", "xp_bonus": 100, - "kriterium": ["g05_schleifen_und_wiederholungen"] + "kriterium": ["lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen"] }, "funktions_zauberin": { "id": "funktions_zauberin", "icon": "🪄", "name": "Funktions-Zauberin", - "desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).", + "desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).", "xp_bonus": 100, - "kriterium": ["g06_funktionen_und_module"] + "kriterium": ["lehrpfad_1_grundlagen/06_funktionen_und_module"] }, "listen_archivarin": { "id": "listen_archivarin", "icon": "📋", "name": "Listen-Archivarin", - "desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).", + "desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).", "xp_bonus": 120, - "kriterium": ["g07_listen_und_sequenzen", "g08_textverarbeitung_und_strings"] + "kriterium": [ + "lehrpfad_1_grundlagen/07_listen_und_sequenzen", + "lehrpfad_1_grundlagen/08_textverarbeitung_und_strings" + ] }, "daten_strategin": { "id": "daten_strategin", "icon": "🗃️", "name": "Daten-Strategin", - "desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", + "desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", "xp_bonus": 150, - "kriterium": ["g09_dictionaries_und_sets", "g10_comprehensions_datum_algorithmen"] + "kriterium": [ + "lehrpfad_1_grundlagen/09_dictionaries_und_sets", + "lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen" + ] }, "bug_jaegerin": { "id": "bug_jaegerin", @@ -99,7 +108,7 @@ BADGES_KATALOG = { "name": "Bug-Jägerin", "desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).", "xp_bonus": 100, - "kriterium": ["00_fehlersuche_und_grundlagen"] + "kriterium": ["lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen"] }, "erste_architektin": { "id": "erste_architektin", @@ -107,7 +116,11 @@ BADGES_KATALOG = { "name": "Erste Architektin", "desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).", "xp_bonus": 200, - "kriterium": ["01_einstieg_klassen", "02_init_und_self", "03_methoden_und_verhalten"] + "kriterium": [ + "lehrpfad_2_oop_einstieg/01_einstieg_klassen", + "lehrpfad_2_oop_einstieg/02_init_und_self", + "lehrpfad_2_oop_einstieg/03_methoden_und_verhalten" + ] }, "tamagotchi_mama": { "id": "tamagotchi_mama", @@ -115,7 +128,7 @@ BADGES_KATALOG = { "name": "Tamagotchi-Mama", "desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).", "xp_bonus": 250, - "kriterium": ["06_abschlussprojekt_tamagotchi"] + "kriterium": ["lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi"] }, "zeit_reisende": { "id": "zeit_reisende", @@ -123,7 +136,7 @@ BADGES_KATALOG = { "name": "Git-Zeitreisende", "desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.", "xp_bonus": 100, - "kriterium": ["04_str_und_darstellung"] + "kriterium": ["lehrpfad_2_oop_einstieg/04_str_und_darstellung"] }, "qualitaets_garantin": { "id": "qualitaets_garantin", @@ -131,7 +144,7 @@ BADGES_KATALOG = { "name": "TDD-Qualitätsgarantin", "desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).", "xp_bonus": 200, - "kriterium": ["09_eigene_unit_tests_schreiben"] + "kriterium": ["lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben"] }, "oop_grossmeisterin": { "id": "oop_grossmeisterin", @@ -139,7 +152,11 @@ BADGES_KATALOG = { "name": "Vererbungs-Koryphäe", "desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).", "xp_bonus": 300, - "kriterium": ["10_vererbung_und_super", "11_polymorphie_und_interfaces", "12_exceptions_und_fehlerbehandlung"] + "kriterium": [ + "lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super", + "lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces", + "lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung" + ] }, "software_architektin": { "id": "software_architektin", @@ -147,7 +164,7 @@ BADGES_KATALOG = { "name": "Meister-Entwicklerin", "desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!", "xp_bonus": 500, - "kriterium": ["16_master_abschlussprojekt"] + "kriterium": ["lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt"] } } @@ -259,7 +276,6 @@ window.GAMIFICATION_LEVEL_STUFEN = {json.dumps(LEVEL_STUFEN, indent=2, ensure_as neu_freigeschaltet_badges = [] for badge_id, badge in BADGES_KATALOG.items(): kriterien = badge["kriterium"] - # Alle Kriterien-Ordner müssen gelöst sein if all(k in neue_geloeste for k in kriterien): if badge_id not in alte_badges: neu_freigeschaltet_badges.append(badge) @@ -308,7 +324,7 @@ window.GAMIFICATION_LEVEL_STUFEN = {json.dumps(LEVEL_STUFEN, indent=2, ensure_as } -def report_single_chapter_result(kapitel_ordner: str, tests_erfolgreich: bool, tests_anzahl: int): +def report_single_chapter_result(kapitel_pfad_relativ: str, tests_erfolgreich: bool, tests_anzahl: int): """ Wird von einzelnen test_aufgabe.py Skripten aufgerufen, wenn sie direkt ausgeführt werden. Aktualisiert den Spielstand und gibt motivierendes Feedback im Terminal aus. @@ -317,8 +333,8 @@ def report_single_chapter_result(kapitel_ordner: str, tests_erfolgreich: bool, t aktuelle_geloeste = set(gm.state.get("geloeste_kapitel", [])) if tests_erfolgreich and tests_anzahl > 0: - war_bereits_geloest = kapitel_ordner in aktuelle_geloeste - aktuelle_geloeste.add(kapitel_ordner) + war_bereits_geloest = kapitel_pfad_relativ in aktuelle_geloeste + aktuelle_geloeste.add(kapitel_pfad_relativ) # Gesamtbestandene Tests schätzen/updaten alte_tests = gm.state.get("bestandene_tests", 0) diff --git a/index.html b/index.html index f10721b..a0d3f29 100644 --- a/index.html +++ b/index.html @@ -97,7 +97,7 @@
- +
Grundlagen G01
🧮 Python als Taschenrechner
@@ -107,7 +107,7 @@
- +
Grundlagen G02
📦 Variablen & Datentypen
@@ -117,7 +117,7 @@
- +
Grundlagen G03
💬 Interaktive Ein- & Ausgabe
@@ -127,7 +127,7 @@
- +
Grundlagen G04
🚦 Bedingungen & Verzweigungen
@@ -137,7 +137,7 @@
- +
Grundlagen G05
🎡 Schleifen & Wiederholungen
@@ -147,7 +147,7 @@
- +
Grundlagen G06
🪄 Eigene Funktionen & Module
@@ -157,7 +157,7 @@
- +
Grundlagen G07
📋 Listen & Sequenzen
@@ -167,7 +167,7 @@
- +
Grundlagen G08
🔤 Textverarbeitung & Strings
@@ -177,7 +177,7 @@
- +
Grundlagen G09
🗃️ Dictionaries & Sets
@@ -187,7 +187,7 @@
- +
Grundlagen G10
🚀 Comprehensions & Algorithmen
@@ -212,7 +212,7 @@
- +
Warm-up 00
🔍 Fehlersuche & Bugs
@@ -222,7 +222,7 @@
- +
Kapitel 01
🐶 Die erste Klasse
@@ -232,7 +232,7 @@
- +
Kapitel 02
💳 Konstruktor & self
@@ -242,7 +242,7 @@
- +
Kapitel 03
⚔️ Methoden & Verhalten
@@ -252,7 +252,7 @@
- +
Kapitel 04
🧾 Schöne Textausgabe
@@ -262,7 +262,7 @@
- +
Exkurs 04b
🚀 Installation & Setup VS Code
@@ -272,7 +272,7 @@
- +
Exkurs 04c
🌿 Git & Versionskontrolle
@@ -282,7 +282,7 @@
- +
Kapitel 05
🎵 Assoziation & Komposition
@@ -292,7 +292,7 @@
- +
Kapitel 06
🥚 Mini-Projekt: Tamagotchi
@@ -317,7 +317,7 @@
- +
Kapitel 07
🌳 Referenzen & Stammbäume
@@ -327,7 +327,7 @@
- +
Kapitel 08
➕ Operator Overloading & Dunder
@@ -337,7 +337,7 @@
- +
Kapitel 09
🧪 Eigene Unit Tests & TDD
@@ -347,7 +347,7 @@
- +
Kapitel 10
🧬 Vererbung & super()
@@ -357,7 +357,7 @@
- +
Kapitel 11
🎭 Polymorphie & Interfaces
@@ -367,7 +367,7 @@
- +
Kapitel 12
🛡️ Exceptions & Fehlerbehandlung
@@ -377,7 +377,7 @@
- +
Kapitel 13
💾 Datei-Persistenz: JSON & CSV
@@ -387,7 +387,7 @@
- +
Kapitel 14
🖥️ Desktop-GUIs mit Tkinter
@@ -397,7 +397,7 @@
- +
Kapitel 15
🎒 Parameter & Eigene Container
@@ -407,7 +407,7 @@
- +
🏆 Kapitel 16 • Masterprojekt
🐾 PetCare & Tierheim-Manager
diff --git a/g01_erste_schritte_taschenrechner/README.md b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/README.md similarity index 100% rename from g01_erste_schritte_taschenrechner/README.md rename to lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/README.md diff --git a/g01_erste_schritte_taschenrechner/aufgabe.py b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/aufgabe.py similarity index 100% rename from g01_erste_schritte_taschenrechner/aufgabe.py rename to lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/aufgabe.py diff --git a/g01_erste_schritte_taschenrechner/index.html b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/index.html similarity index 96% rename from g01_erste_schritte_taschenrechner/index.html rename to lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/index.html index ae8cd7c..7ef0c58 100644 --- a/g01_erste_schritte_taschenrechner/index.html +++ b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/index.html @@ -4,18 +4,18 @@ Grundlagen 01: Python als Taschenrechner - +
Grundlagen 01 • Schulabgleich 02.1

Python als Taschenrechner 🧮

@@ -294,8 +294,8 @@
@@ -303,7 +303,7 @@ - - + + diff --git a/g01_erste_schritte_taschenrechner/musterloesung.py b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/musterloesung.py similarity index 100% rename from g01_erste_schritte_taschenrechner/musterloesung.py rename to lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/musterloesung.py diff --git a/g01_erste_schritte_taschenrechner/test_aufgabe.py b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/test_aufgabe.py similarity index 95% rename from g01_erste_schritte_taschenrechner/test_aufgabe.py rename to lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/test_aufgabe.py index a0bafba..29b039f 100644 --- a/g01_erste_schritte_taschenrechner/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/test_aufgabe.py @@ -127,9 +127,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g02_variablen_und_datentypen/README.md b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/README.md similarity index 100% rename from g02_variablen_und_datentypen/README.md rename to lehrpfad_1_grundlagen/02_variablen_und_datentypen/README.md diff --git a/g02_variablen_und_datentypen/aufgabe.py b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/aufgabe.py similarity index 100% rename from g02_variablen_und_datentypen/aufgabe.py rename to lehrpfad_1_grundlagen/02_variablen_und_datentypen/aufgabe.py diff --git a/g02_variablen_und_datentypen/index.html b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/index.html similarity index 95% rename from g02_variablen_und_datentypen/index.html rename to lehrpfad_1_grundlagen/02_variablen_und_datentypen/index.html index 4c12a37..7f0c665 100644 --- a/g02_variablen_und_datentypen/index.html +++ b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/index.html @@ -4,20 +4,20 @@ Grundlagen 02: Variablen & Datentypen - +
Grundlagen 02 • Schulabgleich 03.0 & 03.1

Variablen & Datentypen 📦🏷️

@@ -245,8 +245,8 @@
@@ -254,7 +254,7 @@ - - + + diff --git a/g02_variablen_und_datentypen/musterloesung.py b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/musterloesung.py similarity index 100% rename from g02_variablen_und_datentypen/musterloesung.py rename to lehrpfad_1_grundlagen/02_variablen_und_datentypen/musterloesung.py diff --git a/g02_variablen_und_datentypen/test_aufgabe.py b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/test_aufgabe.py similarity index 95% rename from g02_variablen_und_datentypen/test_aufgabe.py rename to lehrpfad_1_grundlagen/02_variablen_und_datentypen/test_aufgabe.py index 9603fa2..d038dc3 100644 --- a/g02_variablen_und_datentypen/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/02_variablen_und_datentypen/test_aufgabe.py @@ -113,9 +113,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g03_ein_und_ausgabe/README.md b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/README.md similarity index 100% rename from g03_ein_und_ausgabe/README.md rename to lehrpfad_1_grundlagen/03_ein_und_ausgabe/README.md diff --git a/g03_ein_und_ausgabe/aufgabe.py b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py similarity index 100% rename from g03_ein_und_ausgabe/aufgabe.py rename to lehrpfad_1_grundlagen/03_ein_und_ausgabe/aufgabe.py diff --git a/g03_ein_und_ausgabe/index.html b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/index.html similarity index 95% rename from g03_ein_und_ausgabe/index.html rename to lehrpfad_1_grundlagen/03_ein_und_ausgabe/index.html index 0204190..e218e2b 100644 --- a/g03_ein_und_ausgabe/index.html +++ b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/index.html @@ -4,20 +4,20 @@ Kapitel G03: Interaktive Ein- & Ausgabe - +
Grundlagen G03 • Schulabgleich 07.0

Interaktive Ein- & Ausgabe 💬⌨️

@@ -248,8 +248,8 @@ return f"Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg:
@@ -257,7 +257,7 @@ return f"Steckbrief: {name} | Größe: {groesse_m:.2f} m | Gewicht: {gewicht_kg: - - + + diff --git a/g03_ein_und_ausgabe/musterloesung.py b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/musterloesung.py similarity index 100% rename from g03_ein_und_ausgabe/musterloesung.py rename to lehrpfad_1_grundlagen/03_ein_und_ausgabe/musterloesung.py diff --git a/g03_ein_und_ausgabe/test_aufgabe.py b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/test_aufgabe.py similarity index 95% rename from g03_ein_und_ausgabe/test_aufgabe.py rename to lehrpfad_1_grundlagen/03_ein_und_ausgabe/test_aufgabe.py index 0b00794..557850a 100644 --- a/g03_ein_und_ausgabe/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/03_ein_und_ausgabe/test_aufgabe.py @@ -145,9 +145,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g04_verzweigungen_und_bedingungen/README.md b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/README.md similarity index 100% rename from g04_verzweigungen_und_bedingungen/README.md rename to lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/README.md diff --git a/g04_verzweigungen_und_bedingungen/aufgabe.py b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/aufgabe.py similarity index 100% rename from g04_verzweigungen_und_bedingungen/aufgabe.py rename to lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/aufgabe.py diff --git a/g04_verzweigungen_und_bedingungen/index.html b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/index.html similarity index 95% rename from g04_verzweigungen_und_bedingungen/index.html rename to lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/index.html index 6cd6e83..5a69680 100644 --- a/g04_verzweigungen_und_bedingungen/index.html +++ b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/index.html @@ -4,20 +4,20 @@ Kapitel G04: Bedingungen & Verzweigungen - +
Grundlagen G04 • Schulabgleich 08.0

Bedingungen & Verzweigungen 🛤️🔀

@@ -280,8 +280,8 @@ return False
@@ -289,7 +289,7 @@ return False - - + + diff --git a/g04_verzweigungen_und_bedingungen/musterloesung.py b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/musterloesung.py similarity index 100% rename from g04_verzweigungen_und_bedingungen/musterloesung.py rename to lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/musterloesung.py diff --git a/g04_verzweigungen_und_bedingungen/test_aufgabe.py b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/test_aufgabe.py similarity index 96% rename from g04_verzweigungen_und_bedingungen/test_aufgabe.py rename to lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/test_aufgabe.py index 9809e5b..08cc643 100644 --- a/g04_verzweigungen_und_bedingungen/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/test_aufgabe.py @@ -160,9 +160,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g05_schleifen_und_wiederholungen/README.md b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/README.md similarity index 100% rename from g05_schleifen_und_wiederholungen/README.md rename to lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/README.md diff --git a/g05_schleifen_und_wiederholungen/aufgabe.py b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/aufgabe.py similarity index 100% rename from g05_schleifen_und_wiederholungen/aufgabe.py rename to lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/aufgabe.py diff --git a/g05_schleifen_und_wiederholungen/index.html b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/index.html similarity index 96% rename from g05_schleifen_und_wiederholungen/index.html rename to lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/index.html index 0b63ac3..c782b95 100644 --- a/g05_schleifen_und_wiederholungen/index.html +++ b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/index.html @@ -4,20 +4,20 @@ Kapitel G05: Schleifen & Wiederholungen - +
Grundlagen G05 • Schulabgleich 09.1 & 09.2

Schleifen & Wiederholungen 🎡🔄

@@ -321,8 +321,8 @@
@@ -330,7 +330,7 @@ - - + + diff --git a/g05_schleifen_und_wiederholungen/musterloesung.py b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/musterloesung.py similarity index 100% rename from g05_schleifen_und_wiederholungen/musterloesung.py rename to lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/musterloesung.py diff --git a/g05_schleifen_und_wiederholungen/test_aufgabe.py b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/test_aufgabe.py similarity index 95% rename from g05_schleifen_und_wiederholungen/test_aufgabe.py rename to lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/test_aufgabe.py index fe3eda6..ecb9a32 100644 --- a/g05_schleifen_und_wiederholungen/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/test_aufgabe.py @@ -178,9 +178,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g06_funktionen_und_module/README.md b/lehrpfad_1_grundlagen/06_funktionen_und_module/README.md similarity index 100% rename from g06_funktionen_und_module/README.md rename to lehrpfad_1_grundlagen/06_funktionen_und_module/README.md diff --git a/g06_funktionen_und_module/aufgabe.py b/lehrpfad_1_grundlagen/06_funktionen_und_module/aufgabe.py similarity index 100% rename from g06_funktionen_und_module/aufgabe.py rename to lehrpfad_1_grundlagen/06_funktionen_und_module/aufgabe.py diff --git a/g06_funktionen_und_module/index.html b/lehrpfad_1_grundlagen/06_funktionen_und_module/index.html similarity index 96% rename from g06_funktionen_und_module/index.html rename to lehrpfad_1_grundlagen/06_funktionen_und_module/index.html index bc5ee21..199a552 100644 --- a/g06_funktionen_und_module/index.html +++ b/lehrpfad_1_grundlagen/06_funktionen_und_module/index.html @@ -4,20 +4,20 @@ Kapitel G06: Eigene Funktionen & Module - +
Grundlagen G06 • Schulabgleich 05.0 & 05.1

Eigene Funktionen & Module 🪄📦

@@ -274,8 +274,8 @@
@@ -283,7 +283,7 @@ - - + + diff --git a/g06_funktionen_und_module/musterloesung.py b/lehrpfad_1_grundlagen/06_funktionen_und_module/musterloesung.py similarity index 100% rename from g06_funktionen_und_module/musterloesung.py rename to lehrpfad_1_grundlagen/06_funktionen_und_module/musterloesung.py diff --git a/g06_funktionen_und_module/test_aufgabe.py b/lehrpfad_1_grundlagen/06_funktionen_und_module/test_aufgabe.py similarity index 96% rename from g06_funktionen_und_module/test_aufgabe.py rename to lehrpfad_1_grundlagen/06_funktionen_und_module/test_aufgabe.py index 91a7d5c..64d6984 100644 --- a/g06_funktionen_und_module/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/06_funktionen_und_module/test_aufgabe.py @@ -167,9 +167,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g07_listen_und_sequenzen/README.md b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/README.md similarity index 100% rename from g07_listen_und_sequenzen/README.md rename to lehrpfad_1_grundlagen/07_listen_und_sequenzen/README.md diff --git a/g07_listen_und_sequenzen/aufgabe.py b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/aufgabe.py similarity index 100% rename from g07_listen_und_sequenzen/aufgabe.py rename to lehrpfad_1_grundlagen/07_listen_und_sequenzen/aufgabe.py diff --git a/g07_listen_und_sequenzen/index.html b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/index.html similarity index 96% rename from g07_listen_und_sequenzen/index.html rename to lehrpfad_1_grundlagen/07_listen_und_sequenzen/index.html index e36df88..b43b00d 100644 --- a/g07_listen_und_sequenzen/index.html +++ b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/index.html @@ -4,16 +4,16 @@ Kapitel G07: Listen & Sequenzen in Python - +
@@ -265,8 +265,8 @@
@@ -274,7 +274,7 @@ - - + + diff --git a/g07_listen_und_sequenzen/musterloesung.py b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/musterloesung.py similarity index 100% rename from g07_listen_und_sequenzen/musterloesung.py rename to lehrpfad_1_grundlagen/07_listen_und_sequenzen/musterloesung.py diff --git a/g07_listen_und_sequenzen/test_aufgabe.py b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/test_aufgabe.py similarity index 94% rename from g07_listen_und_sequenzen/test_aufgabe.py rename to lehrpfad_1_grundlagen/07_listen_und_sequenzen/test_aufgabe.py index bad711a..afb1853 100644 --- a/g07_listen_und_sequenzen/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/07_listen_und_sequenzen/test_aufgabe.py @@ -123,9 +123,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g08_textverarbeitung_und_strings/README.md b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/README.md similarity index 100% rename from g08_textverarbeitung_und_strings/README.md rename to lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/README.md diff --git a/g08_textverarbeitung_und_strings/aufgabe.py b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/aufgabe.py similarity index 100% rename from g08_textverarbeitung_und_strings/aufgabe.py rename to lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/aufgabe.py diff --git a/g08_textverarbeitung_und_strings/index.html b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/index.html similarity index 95% rename from g08_textverarbeitung_und_strings/index.html rename to lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/index.html index 6814efc..4dad936 100644 --- a/g08_textverarbeitung_und_strings/index.html +++ b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/index.html @@ -4,16 +4,16 @@ Kapitel G08: Textverarbeitung & Strings in Python - +
@@ -220,8 +220,8 @@
@@ -229,7 +229,7 @@ - - + + diff --git a/g08_textverarbeitung_und_strings/musterloesung.py b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/musterloesung.py similarity index 100% rename from g08_textverarbeitung_und_strings/musterloesung.py rename to lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/musterloesung.py diff --git a/g08_textverarbeitung_und_strings/test_aufgabe.py b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/test_aufgabe.py similarity index 94% rename from g08_textverarbeitung_und_strings/test_aufgabe.py rename to lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/test_aufgabe.py index d59c10a..70b1af5 100644 --- a/g08_textverarbeitung_und_strings/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/test_aufgabe.py @@ -97,9 +97,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g09_dictionaries_und_sets/README.md b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/README.md similarity index 100% rename from g09_dictionaries_und_sets/README.md rename to lehrpfad_1_grundlagen/09_dictionaries_und_sets/README.md diff --git a/g09_dictionaries_und_sets/aufgabe.py b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py similarity index 100% rename from g09_dictionaries_und_sets/aufgabe.py rename to lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py diff --git a/g09_dictionaries_und_sets/index.html b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/index.html similarity index 95% rename from g09_dictionaries_und_sets/index.html rename to lehrpfad_1_grundlagen/09_dictionaries_und_sets/index.html index 7d99603..759d75d 100644 --- a/g09_dictionaries_und_sets/index.html +++ b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/index.html @@ -4,20 +4,20 @@ Kapitel G09: Dictionaries & Sets - +
Kapitel G09 • Schulabgleich 15.0

Dictionaries & Sets: Schlüssel, Werte & Mengen 🗃️✨

@@ -294,8 +294,8 @@
@@ -303,7 +303,7 @@ - - + + diff --git a/g09_dictionaries_und_sets/musterloesung.py b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/musterloesung.py similarity index 100% rename from g09_dictionaries_und_sets/musterloesung.py rename to lehrpfad_1_grundlagen/09_dictionaries_und_sets/musterloesung.py diff --git a/g09_dictionaries_und_sets/test_aufgabe.py b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/test_aufgabe.py similarity index 95% rename from g09_dictionaries_und_sets/test_aufgabe.py rename to lehrpfad_1_grundlagen/09_dictionaries_und_sets/test_aufgabe.py index 1e9d16a..79eb65a 100644 --- a/g09_dictionaries_und_sets/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/09_dictionaries_und_sets/test_aufgabe.py @@ -142,9 +142,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/g10_comprehensions_datum_algorithmen/README.md b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/README.md similarity index 100% rename from g10_comprehensions_datum_algorithmen/README.md rename to lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/README.md diff --git a/g10_comprehensions_datum_algorithmen/aufgabe.py b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/aufgabe.py similarity index 100% rename from g10_comprehensions_datum_algorithmen/aufgabe.py rename to lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/aufgabe.py diff --git a/g10_comprehensions_datum_algorithmen/index.html b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/index.html similarity index 95% rename from g10_comprehensions_datum_algorithmen/index.html rename to lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/index.html index 9c57e28..facaa8e 100644 --- a/g10_comprehensions_datum_algorithmen/index.html +++ b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/index.html @@ -4,20 +4,20 @@ Kapitel G10: Comprehensions, Datum & Algorithmen - +
Kapitel G10 • Schulabgleich 13.0 & 15.1

Comprehensions, Datum & Algorithmen 🚀📅

@@ -244,8 +244,8 @@
@@ -253,7 +253,7 @@ - - + + diff --git a/g10_comprehensions_datum_algorithmen/musterloesung.py b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/musterloesung.py similarity index 100% rename from g10_comprehensions_datum_algorithmen/musterloesung.py rename to lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/musterloesung.py diff --git a/g10_comprehensions_datum_algorithmen/test_aufgabe.py b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/test_aufgabe.py similarity index 94% rename from g10_comprehensions_datum_algorithmen/test_aufgabe.py rename to lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/test_aufgabe.py index 1f3fca8..bbbc500 100644 --- a/g10_comprehensions_datum_algorithmen/test_aufgabe.py +++ b/lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/test_aufgabe.py @@ -143,9 +143,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/00_fehlersuche_und_grundlagen/README.md b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/README.md similarity index 100% rename from 00_fehlersuche_und_grundlagen/README.md rename to lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/README.md diff --git a/00_fehlersuche_und_grundlagen/aufgabe.py b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/aufgabe.py similarity index 100% rename from 00_fehlersuche_und_grundlagen/aufgabe.py rename to lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/aufgabe.py diff --git a/00_fehlersuche_und_grundlagen/index.html b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html similarity index 96% rename from 00_fehlersuche_und_grundlagen/index.html rename to lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html index ffd2baa..fa1f742 100644 --- a/00_fehlersuche_und_grundlagen/index.html +++ b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/index.html @@ -4,14 +4,14 @@ Kapitel 00: Fehlersuche & Grundlagen - +
@@ -207,7 +207,7 @@ - - + + diff --git a/00_fehlersuche_und_grundlagen/musterloesung.py b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/musterloesung.py similarity index 100% rename from 00_fehlersuche_und_grundlagen/musterloesung.py rename to lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/musterloesung.py diff --git a/00_fehlersuche_und_grundlagen/test_aufgabe.py b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/test_aufgabe.py similarity index 91% rename from 00_fehlersuche_und_grundlagen/test_aufgabe.py rename to lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/test_aufgabe.py index 9c67d7e..df670c4 100644 --- a/00_fehlersuche_und_grundlagen/test_aufgabe.py +++ b/lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/test_aufgabe.py @@ -63,9 +63,11 @@ if __name__ == "__main__": res = unittest.main(verbosity=2, exit=False) try: from pathlib import Path - sys.path.insert(0, str(Path(__file__).parent.parent)) + root_dir = Path(__file__).parent.parent.parent.resolve() + sys.path.insert(0, str(root_dir)) from gamification import report_single_chapter_result - report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun) + rel_pfad = f"{Path(__file__).parent.parent.name}/{Path(__file__).parent.name}" + report_single_chapter_result(rel_pfad, res.result.wasSuccessful(), res.result.testsRun) except Exception: pass sys.exit(0 if res.result.wasSuccessful() else 1) \ No newline at end of file diff --git a/01_einstieg_klassen/README.md b/lehrpfad_2_oop_einstieg/01_einstieg_klassen/README.md similarity index 100% rename from 01_einstieg_klassen/README.md rename to lehrpfad_2_oop_einstieg/01_einstieg_klassen/README.md diff --git a/01_einstieg_klassen/aufgabe.py b/lehrpfad_2_oop_einstieg/01_einstieg_klassen/aufgabe.py similarity index 100% rename from 01_einstieg_klassen/aufgabe.py rename to lehrpfad_2_oop_einstieg/01_einstieg_klassen/aufgabe.py diff --git a/01_einstieg_klassen/index.html b/lehrpfad_2_oop_einstieg/01_einstieg_klassen/index.html similarity index 98% rename from 01_einstieg_klassen/index.html rename to lehrpfad_2_oop_einstieg/01_einstieg_klassen/index.html index cde1e08..e200751 100644 --- a/01_einstieg_klassen/index.html +++ b/lehrpfad_2_oop_einstieg/01_einstieg_klassen/index.html @@ -4,14 +4,14 @@ Kapitel 01: Einstieg in Klassen - +