Aufgaben-Python/lehrpfad_1_grundlagen/09_dictionaries_und_sets/aufgabe.py

137 lines
6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Kapitel G09: Dictionaries & Sets (Mengen) – Aufgabenblatt
=========================================================
Schulabgleich: Thema 15.0 (Dictionaries und Mengen)
In diesem Kapitel lernst du zwei der wichtigsten Datenstrukturen in Python kennen:
1. Dictionaries (Schlüssel-Wert-Paare wie im Wörterbuch oder Telefonbuch)
2. Sets (Mengen von eindeutigen Elementen ohne Duplikate)
Bearbeite die Aufgaben von TODO 1 bis TODO 4.
Überprüfe deine Lösung im Terminal mit:
python3 test_aufgabe.py
"""
from typing import List, Dict, Set
# ==============================================================================
# TODO 1: Wörter-Häufigkeitszähler
# ------------------------------------------------------------------------------
# Schreibe eine Funktion 'woerter_haeufigkeit(text: str) -> dict[str, int]'.
#
# Anforderungen:
# 1. Wandle den gesamten Text in Kleinbuchstaben um (.lower()).
# 2. Entferne gängige Satzzeichen (.,!?;:) aus dem Text oder bereinige die Wörter.
# 3. Zerlege den Text in einzelne Wörter (.split()).
# 4. Zähle mit einem Dictionary, wie oft jedes Wort vorkommt.
# 5. Gib das fertige Dictionary {wort: anzahl} zurück.
#
# Beispiel:
# text = "Apfel Banane Apfel Birne Banane Apfel"
# Ergebnis: {"apfel": 3, "banane": 2, "birne": 1}
# ==============================================================================
def woerter_haeufigkeit(text: str) -> Dict[str, int]:
"""Zählt die Häufigkeit aller Wörter in einem gegebenen Text (case-insensitive)."""
# Schreibe hier deinen Code für TODO 1:
pass
# ==============================================================================
# TODO 2: Telefonbuch-Suche mit .get()
# ------------------------------------------------------------------------------
# Schreibe eine Funktion 'telefonbuch_suche(telefonbuch: dict[str, str], name: str) -> str'.
#
# Anforderungen:
# 1. Suche im Dictionary 'telefonbuch' nach dem Schlüssel 'name'.
# 2. Verwende dafür die sichere Methode .get(key, standardwert), um einen KeyError
# zu vermeiden!
# 3. Wenn der Name existiert, gib die zugehörige Telefonnummer zurück.
# 4. Wenn der Name NICHT existiert, gib den Text "Nicht gefunden" zurück.
#
# Beispiel:
# buch = {"Anna": "0171-123456", "Ben": "0160-987654"}
# telefonbuch_suche(buch, "Anna") -> "0171-123456"
# telefonbuch_suche(buch, "Clara") -> "Nicht gefunden"
# ==============================================================================
def telefonbuch_suche(telefonbuch: Dict[str, str], name: str) -> str:
"""Sucht eine Telefonnummer im Telefonbuch mit sicherer .get() Abfrage."""
# Schreibe hier deinen Code für TODO 2:
pass
# ==============================================================================
# TODO 3: Gemeinsame Interessen (Mengenoperation Schnittmenge)
# ------------------------------------------------------------------------------
# Schreibe eine Funktion 'gemeinsame_interessen(person_a_hobbys: set, person_b_hobbys: set) -> set'.
#
# Anforderungen:
# 1. Die Funktion erhält zwei Mengen (Sets) mit Hobbys von zwei Personen.
# 2. Ermittle alle Hobbys, die BEIDE Personen gemeinsam haben (Schnittmenge / Intersection).
# 3. Nutze entweder den Mengen-Operator '&' oder die Methode '.intersection()'.
# 4. Gib das resultierende Set zurück.
#
# Beispiel:
# a = {"Gaming", "Klettern", "Musik"}
# b = {"Kochen", "Gaming", "Musik", "Lesen"}
# gemeinsame_interessen(a, b) -> {"Gaming", "Musik"}
# ==============================================================================
def gemeinsame_interessen(person_a_hobbys: Set[str], person_b_hobbys: Set[str]) -> Set[str]:
"""Ermittelt die Schnittmenge der Hobbys zweier Personen."""
# Schreibe hier deinen Code für TODO 3:
pass
# ==============================================================================
# TODO 4: Duplikate entfernen & Reihenfolge beibehalten
# ------------------------------------------------------------------------------
# Schreibe eine Funktion 'entferne_duplikate_behalte_reihenfolge(liste: list) -> list'.
#
# Problem: Ein normales 'set(liste)' entfernt Duplikate, verliert aber die Reihenfolge!
# Anforderungen:
# 1. Entferne alle doppelten Elemente aus der übergebenen Liste.
# 2. Die ursprüngliche Reihenfolge des ERSTEN Auftretens der Elemente muss erhalten bleiben.
# 3. Nutze z.B. ein 'seen = set()', um bereits gesehene Elemente blitzschnell nachzuschlagen,
# und füge neue Elemente einer Ergebnisliste hinzu.
# 4. Gib die bereinigte Liste zurück.
#
# Beispiel:
# eingabe = [1, 3, 2, 3, 1, 4, 2, 5]
# Ergebnis: [1, 3, 2, 4, 5]
# ==============================================================================
def entferne_duplikate_behalte_reihenfolge(liste: list) -> list:
"""Entfernt Duplikate aus einer Liste unter Beibehaltung der Reihenfolge."""
# Schreibe hier deinen Code für TODO 4:
pass
# ==============================================================================
# Hauptprogramm zum Ausprobieren:
# (Du kannst diese Datei direkt mit 'python3 aufgabe.py' ausführen)
# ==============================================================================
if __name__ == "__main__":
print("--- 📚 Testlauf: Dictionaries & Sets ---")
# Test TODO 1
beispiel_text = "Python ist super. Python macht Spaß! Ist Python leicht? Ja!"
haeufigkeiten = woerter_haeufigkeit(beispiel_text)
print("Wort-Häufigkeiten:", haeufigkeiten)
# Test TODO 2
tbuch = {"Alice": "0151-111111", "Bob": "0172-222222"}
print("Suche Alice:", telefonbuch_suche(tbuch, "Alice"))
print("Suche Charlie:", telefonbuch_suche(tbuch, "Charlie"))
# Test TODO 3
hobbys_1 = {"Fotografie", "Reisen", "Schwimmen", "Python"}
hobbys_2 = {"Kochen", "Python", "Reisen", "Yoga"}
print("Gemeinsame Hobbys:", gemeinsame_interessen(hobbys_1, hobbys_2))
# Test TODO 4
tiere_mit_duplikaten = ["Katze", "Hund", "Katze", "Maus", "Hund", "Hamster"]
eindeutige_tiere = entferne_duplikate_behalte_reihenfolge(tiere_mit_duplikaten)
print("Ohne Duplikate (Reihenfolge fix):", eindeutige_tiere)