#!/usr/bin/env python3 # 03_funktionen.py # Menü-Programm mit Funktionen: Hosts sammeln, Duplikate verhindern, anzeigen, zählen, filtern, sortieren # Importieren von Modulen import os """ Funktionen * Alle Funktionen haben einen Docstring, damit man später weiß, * was sie tun und welche Parameter sie erwarten. * welche Datentypen sie erwarten und zurückgeben (auch wenn Python das nicht erzwingt). * was sie tun, ohne den Code lesen zu müssen. * Alle Funktionen haben eine klare Trennung von Ein- und Ausgabe, damit man sie später leichter testen und wiederverwenden kann. * Alle Funktionen haben eine klare Trennung von Logik und Präsentation, damit man sie später leichter anpassen und erweitern kann. """ # Funktion zum Normalisieren von Text (z.B. für Vergleiche) def normalize(text: str) -> str: """Trimmt Leerzeichen und macht alles klein (für Vergleiche).""" return text.strip().lower() # Funktion zum Bildschirm löschen (plattformunabhängig) def cls() -> None: os.system("cls" if os.name == "nt" else "clear") # Funktion zum Sammeln von Hostnamen def eingaben_sammeln() -> list[str]: """Fragt Hosts ab und gibt eine Liste zurück (Duplikate werden ignoriert).""" hosts: list[str] = [] hosts_norm: set[str] = set() print("Gib Hostnamen ein (leer lassen zum Beenden)") while True: eingabe = input("Host: ") if eingabe == "": break key = normalize(eingabe) if key in hosts_norm: print("Host bereits vorhanden.") continue hosts.append(eingabe.strip()) hosts_norm.add(key) return hosts # Funktion zum Anzeigen der gesammelten Hosts def hosts_anzeigen(hosts: list[str]) -> None: cls() print("\n--- Gespeicherte Hosts ---") if not hosts: print("(keine Hosts gespeichert)") return for index, host in enumerate(hosts, start=1): print(f"{index} - {host}") # Funktion zum Anzeigen der Anzahl der gesammelten Hosts def anzahl_anzeigen(hosts: list[str]) -> None: cls() print(f"\nAnzahl der Hosts: {len(hosts)}") if not hosts: print("Keine Hosts eingegeben.") # Funktion zum Filtern der Hosts nach TLD def tld_filtern(hosts: list[str]) -> None: cls() if not hosts: print("Keine Hosts gespeichert.") return tld = input("Gib die TLD ein (z.B. .com, .de oder de): ").strip() if tld and not tld.startswith("."): tld = "." + tld treffer = [h for h in hosts if normalize(h).endswith(normalize(tld))] print(f"\nHosts mit der TLD '{tld}':") for index, host in enumerate(treffer, start=1): print(f"{index} - {host}") print(f"\nTreffer: {len(treffer)}") # Funktion zum Sortieren der Hosts def sortieren(hosts: list[str]) -> None: cls() if not hosts: print("Keine Hosts gespeichert.") return sortierte = sorted(hosts, key=lambda x: normalize(x)) print("\n--- Gespeicherte Hosts (sortiert) ---") for index, host in enumerate(sortierte, start=1): print(f"{index} - {host}") # Funktion zum Anzeigen des Menüs und Abfrage der Auswahl def menue() -> str: print( "\n1. Alle Hosts anzeigen" "\n2. Anzahl der Hosts anzeigen" "\n3. TLD filtern" "\n4. Sortieren" "\n5. Beenden" ) return input("Wähle eine Option: ").strip() # Hauptfunktion, die den Ablauf steuert def main() -> None: hosts = eingaben_sammeln() auswahl = input("\nMöchtest du die gespeicherten Hosts anzeigen? (j/n): ") if normalize(auswahl) != "j": print("Programm wird beendet.") input("\nEnter zum Beenden...") return cls() while True: wahl = menue() if wahl == "1": hosts_anzeigen(hosts) elif wahl == "2": anzahl_anzeigen(hosts) elif wahl == "3": tld_filtern(hosts) elif wahl == "4": sortieren(hosts) elif wahl == "5": print("Programm wird beendet.") break else: print("Ungültige Option. Bitte wähle 1-5.") input("\nEnter zum Beenden...") # Nur ausführen, wenn das Skript direkt gestartet wird (nicht importiert) if __name__ == "__main__": main()