Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:grundlagen:03_funktionen

Dies ist eine alte Version des Dokuments!


## Baustein 3: Funktionen und saubere Programmstruktur (mit DokuWiki)

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 # 03_funktionen.py # Menü-Programm mit Funktionen: Hosts sammeln, Duplikate verhindern, anzeigen, zählen, filtern, sortieren

import os

def normalize(text: str) → str:

  """Trimmt Leerzeichen und macht alles klein (fĂĽr Vergleiche)."""
  return text.strip().lower()

def cls() → None:

  os.system("cls" if os.name == "nt" else "clear")

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

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}")

def anzahl_anzeigen(hosts: list[str]) → None:

  cls()
  print(f"\nAnzahl der Hosts: {len(hosts)}")
  if not hosts:
      print("Keine Hosts eingegeben.")

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)}")

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}")

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()

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...")

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.

python/grundlagen/03_funktionen.1772289521.txt.gz · Zuletzt geändert: von lars