Teil 8: Eigene Funktionen
Lernziele
- Eine eigene Funktion mit
defschreiben und aufrufen- Funktionen Argumente übergeben
- Mit
returneinen Wert zurückgeben und weiterverwenden- Den Unterschied zwischen Ausgeben und Zurückgeben erklären
- Funktionen innerhalb anderer Funktionen aufrufen
Neue Befehle:
defdefiniert eine eigene Funktionreturngibt einen Wert zurück und beendet die Funktion
Befehlskarte
| Befehl | Wirkung |
|---|---|
eva.forward(100) | 100 Schritte vorwärts |
eva.back(100) | 100 Schritte rückwärts |
eva.left(90) | um 90° nach links drehen |
eva.right(90) | um 90° nach rechts drehen |
eva.penup() | Stift anheben: eva läuft, ohne zu zeichnen |
eva.pendown() | Stift wieder absetzen |
eva.color("red") | Farbe wechseln: "blue", "green", "orange", "purple" … |
eva.speed(0) | ohne Animation zeichnen |
def name(parameter): | eigene Funktion definieren |
name(argument) | Funktion aufrufen |
return wert | Wert zurückgeben, Funktion beenden |
Eigene Funktionen
Funktionen kennen Sie schon: print, input, range oder eva.forward. Jetzt schreiben wir eigene. Hier zeichnet eva drei Quadrate nebeneinander:
Das funktioniert, ist aber mühsam: Wer die Quadrate grösser haben will, muss an drei Stellen ändern. Mit eigenen Funktionen geben wir den Bausteinen einen Namen und schreiben sie nur einmal:
Die letzten fünf Zeilen lesen sich fast wie ein Satz. Funktionen machen Programme kürzer, übersichtlicher und leichter zu korrigieren, weil eine Änderung nur an einer Stelle nötig ist. Probieren Sie es aus: Ändern Sie die 50 auf 30.
Löschen Sie danach die fünf letzten Zeilen und starten Sie das Programm nochmals. Was passiert?
Aufbau einer Funktion
Aufgabe 8.1: WindradSchreiben Sie eine Funktion
dreieck(), die ein gleichseitiges Dreieck mit Seitenlänge 80 zeichnet. Rufen Sie sie zwölfmal auf und drehen Sie eva nach jedem Dreieck um 30° nach rechts. So entsteht ein Windrad.
Parameter und Argumente
Unser quadrat() kann nur Quadrate mit Seitenlänge 50. Damit eine Funktion mit verschiedenen Werten arbeiten kann, bekommt sie einen Parameter: einen Platzhalter in der Klammer, der beim Aufruf mit einem Wert gefüllt wird. Den Wert beim Aufruf nennt man Argument.
Beim Aufruf quadrat(60) steht im Parameter seite der Wert 60. Ein Aufruf darf auch in einer Schleife stehen. Probieren Sie anstelle der vier Aufrufe:
for groesse in range(10, 151, 10):
quadrat(groesse)
Mehrere Parameter werden mit Kommas getrennt. Die Funktion erwartet immer genau so viele Argumente, wie bei der Definition angegeben wurden. Was passiert, wenn Sie quadrat() ohne Argument aufrufen?
Aufgabe 8.2: Vielecke auf BestellungSchreiben Sie eine Funktion
vieleck(ecken, seite), die ein regelmässiges Vieleck zeichnet.vieleck(5, 100)zeichnet also ein Fünfeck mit Seitenlänge 100. Testen Sie Ihre Funktion mit mehreren Aufrufen, zum Beispiel einem Dreieck, einem Sechseck und einem Zwölfeck.
Funktionen in Funktionen
Eine Funktion darf andere Funktionen aufrufen. So bauen Sie grössere Muster aus kleinen, geprüften Bausteinen.
Aufgabe 8.3: BlumeSchreiben Sie eine Funktion
blume(blaetter, seite), dieblaetterQuadrate mit Seitenlängeseitezeichnet und eva nach jedem Quadrat so weit dreht, dass sie am Schluss genau einmal rundherum gedreht hat. Verwenden Sie dafür die Funktionquadrat, die schon im Editor steht. Zeichnen Sie dannblume(12, 60).
Aufgabe 8.4: HäuserzeileSchreiben Sie eine Funktion
haus(groesse), die ein Haus zeichnet: ein Quadrat mit Seitenlängegroesseund darauf ein gleichseitiges Dreieck als Dach. Nach dem Zeichnen soll eva wieder unten links stehen und nach rechts schauen. Zeichnen Sie damit eine Häuserzeile aus drei verschieden grossen Häusern.
Rückgabewerte
Bisher haben unsere Funktionen gezeichnet. Oft soll eine Funktion aber etwas ausrechnen und das Ergebnis zurückliefern, damit das Programm damit weiterarbeiten kann. Dafür gibt es return.
Der Aufruf aussenwinkel(6) wird durch den zurückgegebenen Wert ersetzt, hier 60.0. Diesen Wert kann man ausgeben, in einer Variablen speichern oder direkt weiterverwenden, zum Beispiel in einer anderen Funktion:
Rätsel:return?Die beiden Funktionen sehen fast gleich aus. Sagen Sie voraus, was das Programm ausgibt, und führen Sie es dann aus. Was ist in
agespeichert, was inb?
Ausgeben oder zurückgeben
Aufgabe 8.5: UmfangSchreiben Sie eine Funktion
umfang(ecken, seite), die den Umfang eines regelmässigen Vielecks zurückgibt, also die Länge aller Seiten zusammen. Testen Sie sie mitprint(umfang(6, 80)).
Aufgabe 8.6: Rot und BlauSchreiben Sie eine Funktion
ist_gerade(n), dieTruezurückgibt, wennngerade ist, sonstFalse. Tipp:n % 2ist der Rest beim Teilen durch 2.Zeichnen Sie damit 12 Quadrate mit Seitenlänge 70, nach jedem dreht sich eva um 30° nach rechts. Die Quadrate mit geradem
isind rot ("red"), die mit ungeradem blau ("blue").
Aufgabe 8.7: Die längste SeiteEin Dreieck hat drei Seiten. Schreiben Sie eine Funktion
max3(a, b, c), die die längste der drei Seiten zurückgibt, ohne die eingebaute Funktionmaxzu verwenden.
Weitere Aufgaben
Zusatzaufgabe 8.8: Gleicher UmfangAlle Vielecke sollen denselben Umfang 400 haben: vom Dreieck bis zum Zehneck. Schreiben Sie eine Funktion
seite_fuer_umfang(ecken, umfang), die zurückgibt, wie lang eine Seite sein muss. Zeichnen Sie dann mit einer Schleife und der Funktionvieleckalle Vielecke von 3 bis 10 Ecken mit Umfang 400. Was fällt Ihnen auf, je mehr Ecken es werden?
Zusatzaufgabe 8.9: PrimzahlenSchreiben Sie eine Funktion
ist_prim(n), die prüft, obneine Primzahl ist. Eine Primzahl ist grösser als 1 und nur durch 1 und sich selbst teilbar.Testen Sie Ihre Funktion mit den Zahlen 2, 3, 4, 11 und 15. Welche Ergebnisse erwarten Sie, bevor Sie das Programm laufen lassen? Welcher Testfall ist am wichtigsten?