lehrkraefte:snr:informatik:glf22:python:funktionen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:glf22:python:funktionen [2022/11/17 20:24]
Olaf Schnürer [Funktionen]
lehrkraefte:snr:informatik:glf22:python:funktionen [2022/11/29 12:10] (current)
Olaf Schnürer [Bonus-Aufgabe: Funktionen zum Zeichnen einer Spirale und zum "unsichtbaren" Bewegen der Turtle]
Line 6: Line 6:
  
 <WRAP center round info> <WRAP center round info>
-(teilweise Vorschau auf das Video)+(teilweise Vorschau auf die Videos)
  
 Das Aufteilen eines grösseren Vorhabens in Teilvorhaben, die sogenannten **Module**, nennt man **Modularisierung**, auch **modularen Entwurf** oder **Baukastenprinzip**. Dadurch ist es leichter, die Übersicht über das gesamte Vorhaben zu behalten.  Das Aufteilen eines grösseren Vorhabens in Teilvorhaben, die sogenannten **Module**, nennt man **Modularisierung**, auch **modularen Entwurf** oder **Baukastenprinzip**. Dadurch ist es leichter, die Übersicht über das gesamte Vorhaben zu behalten. 
Line 34: Line 34:
  
 [[https://fginfo.ksbg.ch/~olaf/videos-glf22/funktionen-ohne-rueckgabewert-teils-mit-turtle.mp4|Video "Funktionen mit Parametern selbst definieren (teils mit Turtle)"]] [[https://fginfo.ksbg.ch/~olaf/videos-glf22/funktionen-ohne-rueckgabewert-teils-mit-turtle.mp4|Video "Funktionen mit Parametern selbst definieren (teils mit Turtle)"]]
 +
 +----
  
 Endzustand der Programme aus dem Video (mit kleinen sprachlichen Verbesserungen): Endzustand der Programme aus dem Video (mit kleinen sprachlichen Verbesserungen):
Line 163: Line 165:
     * Danach kommt ein Doppelpunkt '':''.     * Danach kommt ein Doppelpunkt '':''.
   * Nun folgt in den nächsten Zeilen **eingerückt** der eigentliche Code der Funktion ("body of the function").   * Nun folgt in den nächsten Zeilen **eingerückt** der eigentliche Code der Funktion ("body of the function").
-  * Wenn ein Rückgabewert zurückgeliefert werden soll((so, wie man das erwartet, wenn man an den Funktionsbegriff in der Mathematik denkt)): Verwende das Schlüsselwort ''return'' und schreibe dahinter den Ausdruck für den Rückgabewert.+  * Optional, wenn ein Rückgabewert zurückgeliefert werden soll((so, wie man das erwartet, wenn man an den Funktionsbegriff in der Mathematik denkt)): Verwende das Schlüsselwort ''return'' und schreibe dahinter den Ausdruck für den Rückgabewert.
  
 Die Syntax ist also ähnlich wie bei ''for''- oder ''while''-Schleifen und ''if''-Statments: Eine Art Kopfzeile mit Doppelpunkt am Ende, danach eingerückt der eigentliche Code: Dieser wird bei jedem Funktionsaufruf ausgeführt. Die Syntax ist also ähnlich wie bei ''for''- oder ''while''-Schleifen und ''if''-Statments: Eine Art Kopfzeile mit Doppelpunkt am Ende, danach eingerückt der eigentliche Code: Dieser wird bei jedem Funktionsaufruf ausgeführt.
Line 230: Line 232:
 Das zugrunde liegende Koordinatensystem liegt zentriert im Standard-Turtle-Fenster: Sichtbar sind alle Punkte mit Das zugrunde liegende Koordinatensystem liegt zentriert im Standard-Turtle-Fenster: Sichtbar sind alle Punkte mit
   * x-Koordinaten zwischen -473 und +473 und   * x-Koordinaten zwischen -473 und +473 und
-  * y-Koordinaten zwischen -398 und +398 (jedenfalls auf meinem Laptop).+  * y-Koordinaten zwischen -398 und +398. ((jedenfalls auf meinem Laptop; wenn ich die Dokumentation richtig verstehe, nimmt das Standard-Turtle-Fenster 50 % der Bildschirmbreite und 75 % der Bildschirmhöhe ein))
  
 Man kann die Turtle direkt in einen gewissen Zustand versetzen: Man kann die Turtle direkt in einen gewissen Zustand versetzen:
   * ''setposition(-100, 50)'' bewegt die Turtle auf den Punkt $(-100, 50)$. (Kürzer hat ''setpos(-100, 50)'' denselben Effekt.)   * ''setposition(-100, 50)'' bewegt die Turtle auf den Punkt $(-100, 50)$. (Kürzer hat ''setpos(-100, 50)'' denselben Effekt.)
   * ''setheading(45)'' dreht man die Turtle so, dass ihre Blickrichtung zur positiven $x$-Achse einen Winkel von $45^\circ$ bildet bildet (in mathematisch positivem Drehsinn, also dem Gegenuhrzeigersinn), die Turtle schaut also nach rechts oben. (Kürzer hat ''seth(45)'' denselben Effekt.)   * ''setheading(45)'' dreht man die Turtle so, dass ihre Blickrichtung zur positiven $x$-Achse einen Winkel von $45^\circ$ bildet bildet (in mathematisch positivem Drehsinn, also dem Gegenuhrzeigersinn), die Turtle schaut also nach rechts oben. (Kürzer hat ''seth(45)'' denselben Effekt.)
 +  * ''home()'' bewegt die Turtle in die Start-Position.
 </WRAP> </WRAP>
  
Line 270: Line 273:
 <WRAP center round info> <WRAP center round info>
 Bisher nicht in diesem Kurs erklärt: Bisher nicht in diesem Kurs erklärt:
-Variablen haben in Python Geltungsbereiche, vgl. https://www.w3schools.com/python/python_scope.asp.+Variablen haben in Python **Geltungsbereiche**, vgl. https://www.w3schools.com/python/python_scope.asp.
  
 Dies erlaubt, denselben Variablennamen mehrfach zu verwenden (etwa eine Variable namens ''x'' im "Hauptprogramm" und eine Variable (oder einen Parameter) namens ''x'' in einer Funktion), ohne dass dies zu Konfliken führt.  Dies erlaubt, denselben Variablennamen mehrfach zu verwenden (etwa eine Variable namens ''x'' im "Hauptprogramm" und eine Variable (oder einen Parameter) namens ''x'' in einer Funktion), ohne dass dies zu Konfliken führt. 
Line 277: Line 280:
 </WRAP> </WRAP>
  
 +===== Bonus-Aufgabe: Funktionen zum Zeichnen einer Spirale und zum "unsichtbaren" Bewegen der Turtle =====
 +
 +<WRAP center round todo>
 +{{:lehrkraefte:snr:informatik:glf22:python:vier-spiralen.png?300|}}
 +
 +Ergänze das folgende Programm um die Definition zweier Funktionen (um so das obige Bild zu zeichnen):
 +  * Eine Funktion ''spirale'' mit vier Parametern: Der Funktionsaufruf ''spirale(80, 1, 2, 61)'' soll eine Spirale aus 80 Segmenten mit Anfangslänge 1, Veränderung 2 und Abbiegewinkel 61 zeichnen (also die leicht verdrehte hexagonale Spirale im obigen Screenshot).
 +  * Eine Funktion '' bewege_unsichtbar'' mit zwei Parametern: Der Funktionsaufruf ''bewege_unsichtbar(-200, 200)'' soll die Turtle ohne zu zeichnen auf die Position (-200, 200) bewegen.
 +
 +<code python vorlage-funktionen-spirale-und-bewege.py>
 +from turtle import * 
 +
 +def spirale(n, a, veraenderung, winkel):
 +#
 +# Ergänze hier den "Funktionsrumpf" der Funktion "spirale",
 +# also den Code, der eine Spirale abhängig
 +# von den obigen Parametern zeichnet.
 +#
 +
 +# Ergänze hier die Definition der Funktion "bewege_unsichtbar".
 +# Hinweis: Verwende die Funktion "setpos(x,y)".
 +
 +speed(0)
 +
 +bewege_unsichtbar(200, 200)
 +spirale(40, 10, 5, 90)
 +
 +bewege_unsichtbar(-200, 200)
 +spirale(30, 10, 5, 360/6)
 +
 +bewege_unsichtbar(-200, -200)
 +spirale(80, 1, 2, 61)
 +
 +bewege_unsichtbar(200, -200)
 +spirale(150, 1, 0.3, 360/20)
 +
 +exitonclick()
 +</code>
 +
 +<hidden Lösungsvorschlag>
 +<code python funktionen-spirale-und-bewege.py>
 +from turtle import * 
 +
 +def spirale(n, a, veraenderung, winkel):
 +    for index in range(n):
 +        forward(a + index * veraenderung)
 +        left(winkel)
 +
 +def bewege_unsichtbar(x, y):
 +    penup()
 +    setpos(x, y)
 +    pendown()
 +
 +speed(0)
 +
 +bewege_unsichtbar(200, 200)
 +spirale(40, 10, 5, 90)
 +
 +bewege_unsichtbar(-200, 200)
 +spirale(30, 10, 5, 360/6)
 +
 +bewege_unsichtbar(-200, -200)
 +spirale(80, 1, 2, 61)
 +
 +bewege_unsichtbar(200, -200)
 +spirale(150, 1, 0.3, 360/20)
 +
 +exitonclick()
 +</code>
 +</hidden>
 +</WRAP>
  
  
  • lehrkraefte/snr/informatik/glf22/python/funktionen.1668713058.txt.gz
  • Last modified: 2022/11/17 20:24
  • by Olaf Schnürer