Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
zurĂĽck # Python Teil 3: Funktionen und saubere Programmstruktur
Jetzt machen wir aus dem „funktioniert“-Script ein „wartbar“-Script. Traditionell gesagt: Wir ziehen die Kabel in Kanäle statt sie lose hinterm Rack baumeln zu lassen.
—
# 1) Warum Funktionen?
Problem ohne Funktionen: Alles steht in einer langen Datei, Menü und Logik vermischen sich. Lösung: Jede Aufgabe bekommt eine eigene Funktion:
* Hosts anzeigen * Anzahl anzeigen * TLD filtern * Sortieren * (später) Export / Löschen / Ping
Das macht Code:
* leichter zu lesen * leichter zu testen * leichter zu erweitern
— # 2) Dein nächstes Script: `03_funktionen.py`
Kopiere das komplett als neue Datei:
```python #!/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. # Alle Funktionen haben Typ-Hinweise, damit man später weiß, welche Datentypen sie erwarten und zurückgeben (auch wenn Python das nicht erzwingt). # Alle Funktionen haben sprechende Namen, damit man später weiß, 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()
```
Wichtiges neues Konzept: `if name == „main“:` sorgt dafür, dass `main()` nur startet, wenn du die Datei direkt ausführst.
—
# 3) Mini-Ăśbung (Baustein innerhalb Baustein)
Füge eine neue Menüoption 6 hinzu: „Host hinzufügen (nachträglich)“.
Regeln:
* Duplikate sollen weiterhin verhindert werden * Normalisierung berĂĽcksichtigen
Hinweis: Damit das sauber geht, brauchen wir zusätzlich eine Datenstruktur für `hosts_norm` *oder* wir normalisieren beim Nachtragen auch gegen die Liste. (Wir machen es gleich sauber.)
—
# 4) DokuWiki-Seite (Teil 3)
## DokuWiki – Python Teil 3: Funktionen und main()
Ziel: Code in kleine Bausteine zerlegen, damit er ĂĽbersichtlich, wartbar und erweiterbar wird.
—
### 1. Was ist eine Funktion?
Eine Funktion ist ein benannter Codeblock.
def begruessung(name):
print("Hallo", name)
* `def` startet eine Funktion * in Klammern stehen Parameter (Eingaben) * `return` (optional) gibt etwas zurĂĽck
—
### 2. Warum Funktionen?
Ohne Funktionen wird ein Programm schnell unĂĽbersichtlich. Mit Funktionen kann man:
* Code wiederverwenden * leichter testen * leichter erweitern * Fehler schneller finden
—
### 3. Beispiel: Hosts anzeigen als Funktion
def hosts_anzeigen(hosts):
for index, host in enumerate(hosts, start=1):
print(index, "-", host)
Aufruf:
hosts_anzeigen(hosts)
—
### 4. main() – der Startpunkt
Viele Programme haben eine Funktion `main()`, die alles steuert.
def main():
print("Programm startet")
—
### 5. Warum `if name == „main“:`?
if __name__ == "__main__":
main()
Das bedeutet:
* Wenn die Datei direkt gestartet wird → `main()` wird ausgeführt. * Wenn die Datei als Modul importiert wird → `main()` wird NICHT automatisch ausgeführt.
Das ist Standard in Python.
—
### 6. Programmstruktur (ĂĽberblick)
* `normalize()` und `cls()` sind Hilfsfunktionen * `eingaben_sammeln()` sammelt Hosts und gibt eine Liste zurĂĽck * MenĂĽoptionen sind jeweils eigene Funktionen * `main()` steuert den Ablauf
—
### 7. Ăśbungsaufgaben
Übung A: Menüoption „Host hinzufügen“
Erweitere das Menü um eine Option, um nachträglich einen Host hinzuzufügen (Duplikate verhindern).
Übung B: Menüoption „Host löschen“
Erweitere das Menü um „Host löschen“ (mit Fehlerbehandlung).
Ăśbung C: Export in Datei
Speichere die Hostliste in eine Textdatei `hosts.txt`.
—
Wenn du Baustein 3 ausführst und mir sagst „läuft“, machen wir als nächstes Baustein 4: Dateien lesen/schreiben (Hostliste speichern & wieder laden). Das ist dann die Brücke zu echten Admin-Tools.