Rückblick
Funktionen bringen nichts Neues, was das Programm kann – sie bringen Ordnung. Der Gewinn zeigt sich erst beim Ändern: Was einmal dasteht, ändert man einmal.
Das kann ich jetzt
- Ich kann eine Funktion mit
defdefinieren und aufrufen. (4.1) - Ich weiß, dass beim Definieren noch nichts passiert. (4.1)
- Ich kann Funktionen mit Parametern schreiben und den Unterschied zum Argument erklären. (4.2)
- Ich kann eine Funktion mit Rückgabewert schreiben und den Unterschied zu
printerklären. (4.3) - Ich erkenne, wann sich eine eigene Funktion lohnt.
Gemischte Aufgaben
Aufgabe 1: Was wird ausgegeben?
def gruss():
print("Hallo")
def doppelt(zahl):
return zahl * 2
def dreifach(zahl):
print(zahl * 3)
print("A")
gruss()
ergebnis = doppelt(5)
print(ergebnis)
print(doppelt(doppelt(3)))
x = dreifach(4)
print(x)
a) Notiere alle Ausgaben in der richtigen Reihenfolge.
b) Warum erscheint „Hallo" erst nach „A", obwohl gruss weiter oben steht?
c) Die letzte Zeile gibt None aus. Erkläre, warum.
d) Worin unterscheiden sich doppelt und dreifach? Welche der beiden kannst du in einer Rechnung weiterverwenden?
Aufgabe 2: Vier Funktionen mit Fehlern
# a)
def quadrat(zahl)
return zahl * zahl
# b)
def flaeche(laenge, breite):
return laenge * breite
print(flaeche(5))
# c)
def summe(a, b):
ergebnis = a + b
print(summe(3, 4))
# d)
print(begruessung())
def begruessung():
return "Hallo"
Sag für jeden Ausschnitt: Was ist falsch, und was meldet Python?
Tipp zu c)
Die Funktion rechnet richtig – aber was macht sie mit dem Ergebnis? Vergleiche mit dreifach aus Aufgabe 1.
Aufgabe 3: Die Ampel, aufgeräumt
Im Rückblick zu Kapitel 3 hast du eine Ampel gezeichnet – mit dreimal fast demselben Block. Bau sie jetzt mit einer Funktion um.
a) Schreib eine Funktion lampe(y, farbe), die eine gefüllte Lampe an der Höhe y in der angegebenen Farbe zeichnet.
b) Ersetze die drei Blöcke durch drei Aufrufe.
c) Wie viele Zeilen hat dein Programm jetzt, wie viele vorher?
d) Die Lampen sollen größer werden: Radius 40 statt 30. An wie vielen Stellen musst du jetzt ändern, an wie vielen vorher?
e) Schreib zusätzlich eine Funktion ampelfarbe(frei, warnung), die den Text "gruen", "gelb" oder "rot" zurückgibt. Warum ist ein Rückgabewert hier besser, als direkt zu zeichnen?
Tipp 1: Der Kopf der Funktion
def lampe(y, farbe):
penup()
goto(0, y)
pendown()
# ...
Alles, was sich zwischen den drei Blöcken unterschieden hat, wird zum Parameter. Alles, was gleich war, kommt unverändert in den Rumpf.
Tipp 2: zu e)
Die Funktion soll entscheiden, nicht zeichnen:
def ampelfarbe(frei, warnung):
if warnung:
return "gelb"
if frei:
return "gruen"
return "rot"
Ein return beendet die Funktion sofort – deshalb braucht es hier gar kein else.