Skip to content

09 Funktionen

Juergen Hansmann edited this page Mar 16, 2023 · 6 revisions

Funktionen

Wie ein Skript als Ganzen dazu dient, wiederkehrende Aufgaben zu automatisieren, dienen Funktionen dazu wiederkehrende Anweisungsfolgen innerhalb des Skripts zu bündeln.
Das tönt komplizierter als es ist, und wir sind bisher auch schon zahlreichen Funktionen begegnet.

Syntax

Die Syntax, das heisst die Grammatik der Programmiersprache, sieht allgemein so aus:

objekt.funktion(parameter)

Ein konkretes Beispiel:

"hello world".replace("l", "")

Das Objekt ist in diesem Fall der String "hello world", die Funktion heisst replace() und benötigt zwei Parameter.

Built-ins

Für die verschiedensten Objektarten bietet Python zahlreiche vorgefertigte Funktionen (built-in) an, z.B. .sum(), .upper(), .open(), .append() u.v.m.

Wenn eine Funktion keine Parameter benötigt, müssen die Klammern trotzdem geschrieben werden.

Eigene Funktionen

Häufig kommt es vor, dass für ein ganz spezifisches Problem noch keine Funktion zur Verfügung steht. Mit Python können wir massgeschneiderte Funktionen selber programmieren.

# Definition
def addition(zahl1, zahl2):
    summe = zahl1 + zahl2
    return summe

# Aufruf
result = addition(4, 9)
print(result)
  • Eine Funktion wird immer mit dem Befehl def, gefolgt vom Namen und den benötigten Parametern in Klammern definiert.
  • Eine Methode hat meistens einen Rückgabewert, der hinter dem Befehl return steht.
  • Die Methode muss im Skript immer definiert werden, bevor sie aufgerufen wird.

Das Beispiel oben veranschaulicht zwar den Aufbau einer Funktion, sie ergibt aber wenig Sinn, da wir genauso schreiben könnten print(4 + 9).

Das folgende Beispiel ist schon viel sinnvoller. Die Funktion prüft, ob eine Zahl eine Primzahl ist.

def primzahl(zahl):
    if zahl < 2:
        return False
    else:
        for i in range(2, zahl):
            if zahl % i == 0:
                return False
    return True


print(primzahl(37))
  • Der Operator % (modulo) liefert den Rest einer Division
  • Wird innerhalb einer Funktion der Befehl return erreicht, endet die Funktion sofort (ähnlich break bei den Schleifen)

Wenn Funktionen ein komplexeres mathematisches Problem sehr effizient lösen, spricht man häufig von einem Algorithmus.
Obiges Beispielskript zu den Primzahlen liefert zwar korrekte Resultate, ist aber wenig effizient. Sieht jemand, warum?


Übung: Funktion
kreis_funktion.py

  1. Kopiere das Skript kreis.py und speichere es unter kreis_funktion.py
  2. Erweitere das neue Skript, dass du für die Berechnung von Fläche, Umfang und Durchmesser je eine Funktion erstellst und dann aufrufst.
  3. Schreibe zudem eine neue Funktion, die die Benutzereingabe auf Gültigkeit prüft (z.B. Zahlen und keine Buchstaben), bevor sie verarbeitet wird.

Tipp:
Nutze für die Gültigkeitsprüfung das Casting und das Konzept der Fehlerbehandlung try/except.


Übung: Lottosimulation
lotto.py

Wie gross ist die Wahrscheinlichkeit, im Schweizer Zahlenlotto 6 Richtige zu haben?

Tipps:

  • Definiere eine Funktion, die eine Lottoziehung (6 aus 42) simulieren kann
  • random.randint(1, 42) liefert eine Zufallszahl zwischen 1 und 42. (Es braucht also ein import random im Script).
  • Denk daran, dass eine Zahl zur einmal gezogen werden kann. Erinnerst du dich an set()?
  • Erstelle eine einfache Benutzereingabe für die Abgabe der 6 Tipps. Alternativ kannst du die Tippabgabe auch duch den Zufallsgenerator simulieren
  • Führe deine Funktion in einer while-Schleife solange aus, bis die sechs Zufallszahlen mit den eingegebenen Tipps übereinstimmen
  • Zähle die Durchläufe
Clone this wiki locally