diff --git a/Python Presentation.pdf b/Python Presentation.pdf new file mode 100644 index 0000000..3f4b653 Binary files /dev/null and b/Python Presentation.pdf differ diff --git a/assignments/aufgaben.md b/assignments/aufgaben.md index 0c11579..17dc857 100644 --- a/assignments/aufgaben.md +++ b/assignments/aufgaben.md @@ -4,7 +4,7 @@ In der Datei _list_comprehension_ ist eine Liste _artikel_ mit Daten von Supermarktartikeln ```python -artikel = [ +produkte = [ {"artikel": "Quark", "stueckzahl": 18, "price": 1.59, "verfallsdatum": "2026-06-25", "lieferant": "Frisch-Milch AG", "lagerplatz": "Kühlregal 1"}, {...}, ... ] diff --git a/assignments/einkaufswagen.py b/assignments/einkaufswagen.py index e69de29..0c02e54 100644 --- a/assignments/einkaufswagen.py +++ b/assignments/einkaufswagen.py @@ -0,0 +1,15 @@ +class Einkaufswagen: + def __init__(self, kunde, itemList): + self.kunde = kunde + self.itemList = itemList + + def __mul__(self, n): + return Einkaufswagen(self.kunde, self.itemList * n) + + def __str__(self): + return f"{self.kunde} : {self.itemList}" + + +ew1 = Einkaufswagen("Karl", ["Brot", "Milch"]) +ew2 = ew1 * 2 +print(ew2) diff --git a/assignments/gehalt.py b/assignments/gehalt.py index 2cfe2d2..9bc63af 100644 --- a/assignments/gehalt.py +++ b/assignments/gehalt.py @@ -1,6 +1,22 @@ import time +def cache(func): + cache_dict = {} + + def wrapper(*args): + if args[0] in cache_dict: + print("Gehalt vom Cache gehlot") + return cache_dict[args[0]] + else: + print("Gehalt wird gerechnet...") + result = func(args[0]) + cache_dict[args[0]] = result + return result + return wrapper + + +@cache def gehalt(name): # Komplexe Berechnung time.sleep(3) diff --git a/assignments/list_comprehension.py b/assignments/list_comprehension.py index a5dae13..92adec9 100644 --- a/assignments/list_comprehension.py +++ b/assignments/list_comprehension.py @@ -1,15 +1,17 @@ -artikel = [ - {"artikel": "Quark", "stueckzahl": 18, "price": 1.59, "verfallsdatum": "2026-06-25", +from datetime import datetime +heute = datetime.now().strftime("%Y-%m-%d") +produkte = [ + {"artikel": "Quark", "stueckzahl": 18, "price": 1.59, "verfallsdatum": "2026-06-22", "lieferant": "Frisch-Milch AG", "lagerplatz": "Kühlregal 1"}, {"artikel": "Eier", "stueckzahl": 30, "price": 3.29, "verfallsdatum": "2026-06-17", "lieferant": "Bio-Hof Müller", "lagerplatz": "Kühlregal 2"}, - {"artikel": "Fleischwurst", "stueckzahl": 10, "price": 2.89, "verfallsdatum": "2026-06-15", + {"artikel": "Fleischwurst", "stueckzahl": 10, "price": 2.89, "verfallsdatum": "2026-08-23", "lieferant": "Wurstwaren Huber", "lagerplatz": "Kühlregal 3"}, - {"artikel": "Milch", "stueckzahl": 20, "price": 1.49, "verfallsdatum": "2026-06-16", + {"artikel": "Milch", "stueckzahl": 20, "price": 1.49, "verfallsdatum": "2026-06-23", "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 1"}, - {"artikel": "Reis", "stueckzahl": 40, "price": 1.99, "verfallsdatum": "2027-01-01", + {"artikel": "Reis", "stueckzahl": 40, "price": 1.99, "verfallsdatum": "2026-05-01", "lieferant": "Global Import GmbH", "lagerplatz": "Regal A4"}, - {"artikel": "Joghurt", "stueckzahl": 25, "price": 0.99, "verfallsdatum": "2026-06-16", + {"artikel": "Joghurt", "stueckzahl": 25, "price": 0.99, "verfallsdatum": "2026-07-23", "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 1"}, {"artikel": "Salami", "stueckzahl": 22, "price": 3.99, "verfallsdatum": "2026-07-02", "lieferant": "Wurstwaren Huber", "lagerplatz": "Kühlregal 3"}, @@ -17,6 +19,9 @@ artikel = [ "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 2"}, {"artikel": "Butter", "stueckzahl": 40, "price": 2.29, "verfallsdatum": "2026-08-05", "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 2"}, - {"artikel": "Käse", "stueckzahl": 15, "price": 4.99, "verfallsdatum": "2026-06-17", + {"artikel": "Käse", "stueckzahl": 15, "price": 4.99, "verfallsdatum": "2026-06-24", "lieferant": "Käsemanufaktur", "lagerplatz": "Kühlregal 1"} ] +abgelaufen = [(item["artikel"], item["lagerplatz"]) + for item in produkte if item["verfallsdatum"] <= heute] +print(abgelaufen) diff --git a/assignments/musterlösungen/abteilungen_ha_musterlösung.py b/assignments/musterlösungen/abteilungen_ha_musterlösung.py new file mode 100644 index 0000000..6e0aaf6 --- /dev/null +++ b/assignments/musterlösungen/abteilungen_ha_musterlösung.py @@ -0,0 +1,53 @@ +# 1. Decorator: Loggt die Ausführung der Fusion +def log_merger(func): + def wrapper(*args, **kwargs): + print("[SYSTEM LOG]: Initiating merger...") + # WICHTIG: Das Ergebnis der ursprünglichen Funktion muss zurückgegeben werden + return func(*args, **kwargs) + return wrapper + + +class Abteilung: + def __init__(self, name, budget, mitarbeiter): + self.name = name + self.budget = budget + # mitarbeiter ist ein Dictionary: {"Name": "Rolle"} + self.mitarbeiter = mitarbeiter + + # 2. Magic Method __add__: Definiert das Verhalten beim '+' Operator + @log_merger + def __add__(self, other): + # Namen kombinieren und Budgets addieren + neuer_name = f"{self.name} & {other.name}" + neues_budget = self.budget + other.budget + + # Beide Dictionaries zusammenfügen (Unpacking) + combined = {**self.mitarbeiter, **other.mitarbeiter} + + # Dictionary Comprehension mit if-Bedingung: + # Fügt alle Mitarbeiter hinzu, außer diejenigen mit der Rolle "Intern" + neue_mitarbeiter = {name: role for name, + role in combined.items() if role != "Praktikant"} + return Abteilung(neuer_name, neues_budget, neue_mitarbeiter) + + # 3. Magic Method __str__: Definiert die Textausgabe bei print(objekt) + def __str__(self): + return f"Abteilung: {self.name} | Budget: {self.budget}€ | mitarbeiter: {len(self.mitarbeiter)}" + + +if __name__ == "__main__": + # Zwei Abteilungen mit Dictionaries erstellen + it_abteilung = Abteilung( + "IT", 50000, {"Anton": "Developer", "Barbara": "Projektmanagerin", "Carl": "Praktikant"}) + design_abteilung = Abteilung( + "Design", 30000, {"David": "Designer", "Eva": "Praktikant", "Felix": "Abteilungsleiter"}) + + # Fusion durchführen (Ruft log_merger und __add__ auf) + merged_abteilung = it_abteilung + design_abteilung + + # Ergebnisse ausgeben + print("------------------") + print(merged_abteilung) # Ruft __str__ auf + print("Final mitarbeiter List:") + for name, role in merged_abteilung.mitarbeiter.items(): + print(f"- {name}: {role}") diff --git a/assignments/musterlösungen/einkaufswagen_musterlösung.py b/assignments/musterlösungen/einkaufswagen_musterlösung.py new file mode 100644 index 0000000..427eb49 --- /dev/null +++ b/assignments/musterlösungen/einkaufswagen_musterlösung.py @@ -0,0 +1,15 @@ +class Einkaufswagen: + def __init__(self, kunde, items): + self.kunde = kunde + self.items = items # items ist eine Liste + + def __mul__(self, zahl): + return Einkaufswagen(self.kunde, self.items * zahl) + + def __str__(self): + return f"{self.kunde} : {self.items}" + + +ew1 = Einkaufswagen("Sam", ["Milche", "Brot"]) +ew2 = ew1 * 3 +print(ew2) diff --git a/assignments/musterlösungen/gehalt_musterlösung.py b/assignments/musterlösungen/gehalt_musterlösung.py new file mode 100644 index 0000000..4b6b25c --- /dev/null +++ b/assignments/musterlösungen/gehalt_musterlösung.py @@ -0,0 +1,23 @@ +import time + + +def cache(func): + cache_dict = {} + + def wrapper(*mamamia, **kwmamamia): + if mamamia in cache_dict: + print("Ergebnis aus dem Cache geladen!") + return cache_dict[mamamia] + else: + print("Ergebnis wird berechnet ...") + result = func(*mamamia, **kwmamamia) + cache_dict[mamamia] = result + return result + return wrapper + + +@cache +def gehalt(name): + # Komplexe Berechnung + time.sleep(3) + return 3000 diff --git a/assignments/musterlösungen/list_comprehension_musterlösung.py b/assignments/musterlösungen/list_comprehension_musterlösung.py new file mode 100644 index 0000000..27c62a2 --- /dev/null +++ b/assignments/musterlösungen/list_comprehension_musterlösung.py @@ -0,0 +1,26 @@ +from datetime import datetime +today = datetime.now().strftime("%Y-%m-%d") +artikel = [ + {"artikel": "Quark", "stueckzahl": 18, "price": 1.59, "verfallsdatum": "2026-06-25", + "lieferant": "Frisch-Milch AG", "lagerplatz": "Kühlregal 1"}, + {"artikel": "Eier", "stueckzahl": 30, "price": 3.29, "verfallsdatum": "2026-06-17", + "lieferant": "Bio-Hof Müller", "lagerplatz": "Kühlregal 2"}, + {"artikel": "Fleischwurst", "stueckzahl": 10, "price": 2.89, "verfallsdatum": "2026-06-15", + "lieferant": "Wurstwaren Huber", "lagerplatz": "Kühlregal 3"}, + {"artikel": "Milch", "stueckzahl": 20, "price": 1.49, "verfallsdatum": "2026-06-16", + "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 1"}, + {"artikel": "Reis", "stueckzahl": 40, "price": 1.99, "verfallsdatum": "2027-01-01", + "lieferant": "Global Import GmbH", "lagerplatz": "Regal A4"}, + {"artikel": "Joghurt", "stueckzahl": 25, "price": 0.99, "verfallsdatum": "2026-06-16", + "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 1"}, + {"artikel": "Salami", "stueckzahl": 22, "price": 3.99, "verfallsdatum": "2026-07-02", + "lieferant": "Wurstwaren Huber", "lagerplatz": "Kühlregal 3"}, + {"artikel": "Sahne", "stueckzahl": 12, "price": 1.29, "verfallsdatum": "2026-06-17", + "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 2"}, + {"artikel": "Butter", "stueckzahl": 40, "price": 2.29, "verfallsdatum": "2026-08-05", + "lieferant": "Molkerei Süd", "lagerplatz": "Kühlregal 2"}, + {"artikel": "Käse", "stueckzahl": 15, "price": 4.99, "verfallsdatum": "2026-06-17", + "lieferant": "Käsemanufaktur", "lagerplatz": "Kühlregal 1"} +] +abgelaufene_artikel = [(x['artikel'], x['lagerplatz']) + for x in artikel if x['verfallsdatum'] <= today]