-
Notifications
You must be signed in to change notification settings - Fork 1
09 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.
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.
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.
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 (ähnlichbreak
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
- Kopiere das Skript
kreis.py
und speichere es unterkreis_funktion.py
- Erweitere das neue Skript, dass du für die Berechnung von Fläche, Umfang und Durchmesser je eine Funktion erstellst und dann aufrufst.
- 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 Fehlerbehandlungtry
/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 einimport 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
Finde mehr interaktive Beispiele zu den meisten Kapiteln als Python Notebook.