Der Programmaufbau in Python ist immer gleich.
Kommentare werden mit einem # versehen.
#1.Includes from gpanel import * #2. Definitionen def quadrat(x): return(x*x) #3.Hauptprogramm x=4 print(quadrat(x))
Aufgabe 1
Wir wechseln vom GPanel zur Turtle Graphik. Das nachfolgende Programm zeichnet ein gleichseitiges Dreieck. Dabei wird der Vorgang “marschiere 100 Pixel nach vorne und drehe dich dann um 120° nach rechts” dreimal wiederholt.
from gturtle import * makeTurtle() forward(100) right(120) forward(100) right(120) forward(100) right(120) delay(500) hideTurtle()
Anstelle dieses Spaghetti Codes verwenden wir eine Schleife. Da wir die Anzahl an Wiederholungen kennen, verwenden wir die for-Schleife.
for variable in range(Bereich): # hier steht der zu # wiederholende Code
Damit wir der Code lesebarer und kompakter. Achtung, in Python gibt es kein “Begin - End” und / oder Klammern “{ }”, die den Anfang und das Ende einer Schleife anzeigen. Der zu wiederholende Code muss eingerückt werden. Wichtig: Nach range() steht ein Doppelpunkt!
from gturtle import * makeTurtle() for i in range(3): forward(100) right(120) delay(500) hideTurtle()
Die Anweisung in range(3) erzeugt eine Liste der Länge 3, beginnend bei Null, mit Abstand eins. $[0,1,2]$ Die Variable $i$ hat im ersten Durchlauf den Wert $0$, im zweiten Durchlauf den Wert $1$ usw. D.h. wir können innerhalb der Schleife auf die Zählvariable $i$ zugreifen und die aktuelle Durchlaufzahl benutzen.
Aufgabe 2
from gturtle import * makeTurtle() for i in range(9): forward(80*(i+1)) right(120) delay(500) hideTurtle()
Kennt man die Anzahl der Wiederholungen nicht, dann verwendet wir die while-Schleife.
while wahre Aussage: # hier steht der zu # wiederholende Code
Solange die Aussage wahr ist, wird die Schleife durchlaufen.
from gturtle import * makeTurtle() l=100 while l<600: forward(l) right(120) l=l+50 delay(500) hideTurtle()
Aufgabe 3
Willst du nur das fertige Bild sehen, so schreibe den Befehl hideTurtle() direkt nach makeTurtle(). delay(time in ms) kannst du auch weglassen.
Eine Verzweigung des Typs wenn-dann-sonst wird mit der Struktur
if wahre Aussage: # dann wird der Code # hier ausgeführt else: # sonst wird der Code # hier ausgeführt
realisiert. In Python gibt es dann auch noch die Version mit zwei wenn-dann hintereinander, im Sinne von wenn-dann-sonstwenn-dann-sonst.
if wahre Aussage 1: # dann wird der Code # hier ausgeführt elif wahre Aussage 2: # dann wird der Code # hier ausgeführt else: # sonst wird der Code # hier ausgeführt
from gturtle import * makeTurtle() hideTurtle() l=100 while l<600: if l<300: setPenColor("blue") else: setPenColor("red") forward(l) right(120) l=l+50
Aufgabe 4
Hier das Programm von letzter Woche.
from gpanel import * xmin=-2 xmax=1 ymin=-1.5 ymax=1.5 dstep=0.003 maxZ=2 maxIt=50 makeGPanel(xmin,xmax,ymin,ymax) x=xmin while x<xmax: y=ymin while y<ymax: z=0 n=0 c=complex(x,y) while n<maxIt and abs(z)<maxZ: z=z**2+c n=n+1 if n==maxIt: setColor("yellow") else: setColor("blue") point(x,y) y=y+dstep x=x+dstep
Aufgabe 5
Unabhängig von der obigen Aufgabenstellung wollen wir drei von Unterprogrammen anschauen.
from gturtle import * def dreieck(): for i in range(3): forward(100) left(120) makeTurtle() dreieck() setPos(100,50) dreieck()
Das Schlüsselwort ist def, gefolgt vom Namen() des Unterprogramms. Achtung den Doppelpunkt nicht vergessen. Das eigentliche Unterprogramm folgt dann eingerückt. Das Unterprogramm kann nun von einer beliebigen Stelle im Hauptprogramm aufgerufen werden.
Schöner wäre es aber, wenn die Seitenlänge nicht fix, sondern als Parameter übergeben werden kann. Dies geschieht wie folgt:
from gturtle import * def dreieck(l): for i in range(3): forward(l) left(120) makeTurtle() dreieck(100) setPos(100,50) dreieck(50)
Bei der Definition def dreieck(l): seht eine Variable und beim Aufruf dreieck(50) steht der konkrete Wert.
Beim Aufruf dreieck(50) wird der Parameterwert 50 mit übergeben. Im Unterprogramm wird der Variablen l der Wert 50 zugewiesen und im Befehl forward steht keine Konstante, sondern l und l ist gleich 50.
Noch schöner wäre es, wenn nicht nur die Länge, sonder die Anzahl der Ecken übergeben werden kann. Es muss ja nicht immer ein Dreieck sein. Siehe dazu folgendes Programm.
from gturtle import * def nEck(n,l): if n>2: for i in range(n): forward(l) left(360/n) makeTurtle() nEck(3,100) setPos(100,50) nEck(4,50) setPos(25,125) nEck(5,80)
Was geschieht, wenn wir ein 0-Eck, ein 1-Eck oder ein 2-Eck zeichnen wollen. Nun n muss grösser als 2 sein, sonst wird nichts gezeichnet. Falls aber gekommen wir auch eine Rückmeldung vom Unterprogramm? Nein noch nicht.
from gturtle import * def nEck(n,l): if n>2: for i in range(n): forward(l) left(360/n) return(1) return(0) makeTurtle() ans=nEck(3,100) if ans!=1: print("Es ist ein Fehler aufgetreten!") setPos(100,50) if nEck(1,50)!=1:print("Es ist ein Fehler aufgetreten!") setPos(25,125) ans=nEck(5,80)
Aufgabe 6
Siehe dazu folgendes Video vom Kanal 3Blue1Brown.
Als weitere Quelle hier noch ein altes Skript von der ETHZfraktale_ethz.pdf
Wer Interesse hat, kann das Buch SuperFractals, Pattern of Nature von Michael F. Baransley, ISBN-13 987-0-521-84493-2 von mir ausleihen.
Aufgabe 7
* Was ist ein Fraktal?
* Kennst du die Dimension des Serpinski Dreiecks bestimmen?
* Kennst du eine allgemeine Formel zur Dimensionsbestimmung?