Kapitel V - Funktionen
Lösung der Lernfortschrittskontrolle
Bitte vergleiche deine Lösung mit der hier angegebenen Musterlösung. Wenn du der Meinung bist, dass deine Ergebnisse bei mindestens 3 von 4 Aufgaben richtig sind, dann melde dich zum Kapiteltest beim Lehrer. Du kannst deine Programme auch mit Python testen. Achte auch auf die Einhaltung der Syntax, dies ist vor allem im Rahmen der Programmierung "auf Papier" wichtig. Hier werden dir entsprechende Syntaxfehler nicht durch die Programmierumgebung oder den Interpreter zurückgemeldet.
Wenn du weniger Aufgaben richtig bearbeitet hast, solltest du vorher die Inhalte aus Kapitel V nochmals durcharbeiten und gewissenhaft lesen. Vielleicht hilft es dir, wenn du in Zukunft versucht, parallel zu der Bearbeitung des Lerntextes eine knappe Zusammenfassung der wichtigsten Inhalte zu schreiben.
Zur weiteren Vertiefung des Stoffes kannst du dir auch selbst Übungsaufgaben ausdenken: Schreibe eigene Funktionen, die Teilfiguren zeichnen und erzeuge durch den Aufruf dieser Funktionen ganze Figuren oder zugehörige Muster.
Aufgabe 1
Wir kennen mittlerweile fünf reservierte Wörter. Gib diese an und erläutere kurz ihre Bedeutung. Gib auch an, worauf du in Zusammenhang mit reservierten Wörtern achten musst.
Aufgabe 1 (Lösung)
-
from
-
import
Mittels dieser beiden reservierten Wörter lädt man den Bauplan von Klassen. Dies ist nötig, um entsprechende Objekte dieser Klasse zu erzeugen. -
for
-
in
Diese beiden reservierten Wörter leiten eine Zählschleife ein. Zwischen den beiden steht eine Variable und auf das in folgt ein Tupel und ein Doppelpunkt. Die zur Schleife gehörenden Zeilen müssen eine Stufe weiter eingerückt werden.
Hinweis: Wenn wir die Variable in der Schleife nicht direkt verwenden, sondern die Schleife nur nutzen, um eine Anweisung entsprechend oft zu wiederholen, können wir ruhig - wie die "richtigen" Programmierer - einfach i oder j etc. als Variablen wählen. -
def
Das fünfte reservierte Wort wird genutzt, um eine Funktion zu definieren. Es wird gefolgt von einem Funktionsnamen, Klammern und einem Doppelpunkt. Anschließend folgen die zur Funktion gehörenden Zeilen. Allerdings müssen diese entsprechend eine Stufe weiter eingerückt werden und bilden damit einen Anweisungsblock.
Aufgabe 2
Erläutere die Begriffe "Funktionskopf" und "Funktionskörper".
Aufgabe 2 (Lösung)
Bei der Definition von Funktionen unterscheidet man, wie bei einer Schleife, zwischen dem Funktionskopf und dem Funktionskörper. Auch hier gilt wieder: Alle Anweisungen, die zum Funktionskörper gehören, müssen einen Schritt weiter eingerückt sein. In den meisten Fällen übernimmt die Entwicklungsumgebung die Einrückung für uns, wenn sie den Funktionskopf bzw. den abschließenden Doppelpunkt erkannt hat.
Der Funktionskopf beginnt mit dem Schlüsselwort def gefolgt von einem gültigen Funktionsnamen. Hier gelten die gleichen Spielregeln wie für die Wahl von Variablen. Allerdings mit einer wichtigen Erweiterung: Das Wort def gehört auch zur Liste der reservierten Wörter und darf nicht verwendet werden. Auf den Funktionsnamen folgen zwei Klammern () und ein Doppelpunkt :.
Muster:# Kopf der Funktiondef myFunction():# Beginn Funktionskörper# ...# Letzte Zeile des Funktionskörpers# Diese Zeile gehört nicht mehr zum Funktionskörper
Aufgabe 3
# # Autor(en): Christian Graf# # Datum: 19.03.2011# # Beschreibung: Programm zu Aufgabe 3 aus der LFSK Vdef x():print("Funktionsaufruf erfolgt.")print("Programm geht weiter.")
- Das obige Programm wird ausgeführt. Gib die Ausgabe an.
- Beurteile, was an dem Programm fehlt und was man verbessern könnte.
Aufgabe 3 (Lösung)
- Das obige Programm erzeugt bei Ausführung keine Ausgabe. Die einzigen beiden Zeilen, die eine Ausgabe erzeugen könnten, stehen innerhalb eines Funktionskörpers, so dass diese erst bei Aufruf der Funktion ausgeführt werden. Die Ausführung der Funktion erfolgt allerdings nicht.
- Entsprechend den obigen Ausführungen fehlt der Aufruf der Funktion mit dem Namen x. Verbessern könnte man den Namen der Funktion, so dass aus diesem klarer hervorgeht, welche Aufgabe oder welcher Schritt mittels der Funktion umgesetzt werden kann. Ferner ist es sinnvoll, mittels eines Docstrings die Funktion näher zu kommentieren.
Aufgabe 4
-
Schreibe eine Funktion namens ecke, die mittels der Turtle myTurtle die folgende Figur zeichnet.
Dabei soll die in der Variablen seitenlaenge gespeicherte Seitenlänge verwendet werden. Nutze dazu eine Schleife.
Ergebnis der Funktion namens ecke
Hinweis: Fertige vorher eine detaillierte Skizze an, in der du sämtliche Winkel etc. einträgst! -
Schreibe mit Hilfe der Funktion ecke den Ausschnitt eines Programmes, das die folgende Figur zeichnet.
Du kannst davon ausgehen, dass die Turtle myTurtle existiert und seitenlaenge einen geeigneten Wert hat.
Ergebnis des Programmausschnittes - Wir haben am Anfang unserer Arbeit mit der Turtle die Vereinbarung getroffen, dass diese am Ende des Zeichnens wieder in die ursprüngliche Richtung schaut. Entsprechend muss diese nach der Zeichnung einer einzelnen Ecke wieder in die Ausgangsrichtung schauen. Leite aus den bisherigen Ergebnissen bzw. Anweisungen ab, warum dies in dem vorliegenden Fall umständlich ist.
-
Wie musst du den Programmausschnitt erweitern, dass das gezeichnete Kreuz gefärbt ist?
Hinweis: Die zugehörigen Methoden lauten begin_fill() und end_fill().
Ergebnis des Programmausschnittes, nun mitsamt Füllung
Aufgabe 4 (Lösung)
-
def ecke():""" Zeichnen einer Ecke fuer ein Kreuz """myTurtle.left(90)for j in range(3):myTurtle.forward(seitenlaenge)myTurtle.right(90)# Damit die Turtle wieder in die Ausgangsrichtung gucktmyTurtle.left(180)
-
# Kreuz zeichnenfor i in range(4):# in vier Schritten jeweils Ecke + Drehungecke()myTurtle.right(90) -
Durch den Einsatz einer Schleife zum Zeichnen einer Ecke dreht sich die Turtle als letztes um 90° nach rechts. Damit schaut sie genau in die entgegengesetze Richtung. Entsprechend ist eine Drehung um 180° nach rechts oder links erforderlich.
Ohne den Einsatz einer Schleife wäre dies nicht nötig, da man hier direkt im letzten Schritt die Turtle in die richtige Richtung drehen kann. -
# Kreuz zeichnenmyTurtle.begin_fill()for i in range(4):# in vier Schritten jeweils Ecke + Drehungecke()myTurtle.right(90)myTurtle.end_fill()
Wenn du der Meinung bist, dass deine Ergebnisse bei mindestens 3 von 4 Aufgaben richtig sind, dann melde dich zum Kapiteltest beim Lehrer. Bitte achte auf eine gründliche Korrektur deiner Ergebnisse. Insbesondere eine gewissenhafte Korrektur und Bearbeitung der Aufgabe 4 ist wichtig. Übertrage doch hier zur Kontrolle deinen Quelltext 1:1 (zum Auffinden von Syntaxfehlern) in ein Programm und führe dieses aus. Betrachte deine Zeichnung und vergleiche sie mit der angestrebten Zeichnung.