Upload
ingwaz-schnettler
View
119
Download
1
Embed Size (px)
Citation preview
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt1
SFZ FN Sj. 13/14
Python 2 Turtle
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt2
Turtle
Die „Turtle“ ist eine programmierbare „Schildkröte“, die auf dem Boden hin- und herlaufen kann und, falls der Zeichenstift abgesenkt ist, ihren zurückgelegten Weg aufzeichnet.
Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzig and Seymour Papert in 1966
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt3
Beginn der Turtle
Seymour PapertKI-Bereich des MIT in den 1970erProjekte für Kinder mit den Zielen:– Selbständiges Erschließen– geometrischer Zusammenhänge– Computer als Werkzeug zur Erzeugung
geometrischer Figuren– Veranschaulichung der Mathematik,
insbesondere der Geometrie
Ergebnis:Programmiersprache LOGO mit Turtle-Geometrie und präobjektorientierter Sichtweise
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt4
Turtle-Befehle import turtle as t # import der nötigen Module hugo = t.Turtle(shape="turtle") # eine Schildkröte erstellen (Klasse) hugo.fillcolor("red") # Farbe der Schildkröte ändern
hugo.forward(x) # x Pixel vorwärts hugo.left(grad) # Biege grad° nach links ab hugo.right(y) hugo.goto(x,y) # gehe zur Position (x,y) – Im Zentrum ist (0/0), Pixel hugo.circle(r) # zeichne einen Kreis mit Radius r (Pixel) hugo.circle(r,y) # zeichne einen Kreisbogen mit Radius r und Winkel y
hugo.up() # hebe den Stift hugo.down() # senke den Stift – wenn sich Hugo bewegt wird gezeichnet hugo.pencolor(f) # Stelle die Farbe f ein, z.B. “ red“ Hugo.speed(x) # 0: am schnellsten, 10 schnell, 6 normal, 1 langsam
Siehe http://docs.python.org/2/library/turtle.html (Offizielle Doku)
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt5
Beispiel 1: Turtle01
import turtle as t
fenster = t.Screen()fenster.bgcolor('green')hugo = t.Turtle(shape="turtle")hugo.fillcolor("yellow")
hugo.up()hugo.goto(-100,-150)hugo.pencolor('red')hugo.pensize(6)hugo.down()
hugo.circle(200)for i in range(4): hugo.forward(300) hugo.left(90)
t.done() # Warten bis der Benutzer das Fenster schließt
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt6
Wdh Grundlagen Python Variable sind Speicherplätze oder Notizzettel:
int() // float() // str() Das Gleichheitszeichen ist ein Zuweisungsoperator Anzeige:
print var1print " Es ist %0.2f, durch %i = %1.4f" %(cf,d,q)
Einfabe: eingabestr = raw_input("Info: ") Bedingung – bedingte Ausführung eines Codes
if x<y: print ("Bedingung x<y erfüllt")elif x==y: # == ist das mathematische Gleichheitszeichen print ("Bedingung x=0y erfüllt")else: print ("Bedingungen x<y und y==x falsch")
Schleife – wiederholte Ausführung eine Codes, leicht geändert.for i in liste: a=a+i
continue macht bei der nächsten Schleife weiter, break beendet sie Listen [1,2,5,8,9] // range(a,b,d):
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt7
Aufgaben: Turtle02, Turtle02b
Turtle02: Zeichne mit der Turtle ein regelmäßiges Zehneck. Arbeite mit einer Schleife.
Turtle02b: Zeichne mit der Turtle ein regelmäßiges n-Eck, wobei die Eckenanzahl eingegeben werden soll.Erstelle eine Methode. Wie bestimmt man die Winkel?Test die Methode mit dreieck, 6-Ecke, 11-Eck
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt8
Aufgaben: Turtle02c / Turtle3
Turtle02c: Zeichne mit der Turtle ein regelmäßiges Sechseck, das von einem Kreis umgeben ist und in dessen Innerem ein Dreieck liegt (siehe links unten)
Turtle03:Zeichne den 20-zackigen Stern unten
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt9
Aufgaben: Turtle04, Turtle05
Turtle04: Zeichne mit der Turtle das Haus vom Nikolaus.Vorsicht: Überlege davor, wie lang die Strecken sind.
Turtle05: Schreibe eine Methode hausDesNikolaus(breite), die ein Haus vom Nikolaus der Breite breite zeichnet. Zeichne damit verschiedene immer kleiner werdende Häuser an einer Straße.
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt10
Aufgabe: Turtle06
Turtle06: Zeichne mit der Turtle den abgebildeten Kuchen.
Tipps: circle(r,alpha)begin_fill() …end_fill()zeichne mit der Stiftfarbe desHintergrund
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt11
Aufgabe 4: Turtle07-Turtle09
Schreibe eine Methode dreieck(l), die ein gleichseitiges Dreieck der Seitenlänge l zeichnet (Turtle07).
Zeichne damit 10 ineinander geschachtelte Dreiecke (Turtle08).
Zeichne einen Weihnachtsbaum bestehend aus Dreiecken wie nebenan - zuerst ohne Kerzen, Stamm und Stern, die Anzahl der Dreieck (a=b=2c) unten sei aber variabel. Im Bild ist etwa n=4.Turtle09, schreibe eine Methode.
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt12
Aufgabe: Olympische Ringe
Turtle10_Ringe.py Benutze die Methode hugo.circle(r), um die 5 Kreise zu zeichnen.
Zur Position und Farbe der Ringe: – Zeichne sie in einer Schleife– Die Mittelpunktskoordinaten der Kreise sind (xx,yy), die Farbe color – Die Kreiszentren werden wie folgt berechnet: xx=int(x0+r*1.1*x) und yy = int(y0+y*r* 1.1)mit x0,y0 = beliebiger Anfangswert
– Die Werte x,y, stehen in einer Liste x,y,color = posR[i]– Die Liste wird vor der Schleife erstellt posR = [(0,0,"blue"), (-2,0,"purple"),(1,1,"red"), (-1,1,"yellow"), (-3,1,"green")]
– Der Radius ist r=50
Turtle10b_Ringe.py: Schreibe eine Methode, die die Kreise zeichnetDabei werden r, x0,y0 übergeben.
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt13
Klasse (class) – Objekte Unter ObjektOrientierung, kurz OO, versteht man eine Sichtweise auf
komplexe Systeme, bei der ein System durch das Zusammenspiel kooperierender Objekte beschrieben wird. Wichtig ist an einem Objekt, dass ihm bestimmte Attribute (Eigenschaften) und Methoden (Handlungen) zugeordnet sind und dass es in der Lage ist, von anderen Objekten „Informationen“ zu empfangen, beziehungsweise an diese zu senden.
Ergänzt wird dies durch das Konzept der Klasse, in der Objekte aufgrund ähnlicher Eigenschaften zusammengefasst werden.
Ein Objekt wird im Programmcode als Instanz beziehungsweise Inkarnation einer Klasse erstellt.
Die Grundidee der ObjektOrientierten Programmierung, kurz OOP, ist, die Software an den Grundstrukturen desjenigen Bereichs der Wirklichkeit auszurichten, der die gegebene Anwendung betrifft.
Die Umsetzung dieser Denkweise erfordert die Einführung verschiedener Konzepte, insbesondere Klassen, Vererbung, Polymorphie und spätes Binden. Aber auch Datenkapselung, Information Hiding, Überschreiben …
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt14
Klasse MyTurtle / MyTurtle10.py
Eine Klasse kann man sich vorstellen wie einen Bauplan oder die Beschreibung einer Firma
Ein Objekt ist eine bestimmte Realisierung davon.class MyTurtle(t.Turtle): """ Erbt alles von der Klasse Turtle """def __init__(self): """ Konstruktor, wird bei der Erzeugung eines Objekts
automatisch gestartet.Enthält alles was zur Initialisierung gehört """
def drawCircle(self, x, y, color, radius=50):# Normale Methode, beginnt immer mit self,
erscheint im Aufruf aber nicht
Erzeuge ein Objekt vom Typ MyTurtle:hugo = MyTurtle()
Der Rest ist wie gehabt (self erscheint nicht, entspricht hugo)hugo.drawCircle(x, y, color, radius=50):
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt16
Mehrere Turtles Sollen mehr als eine Turtles auf der Zeichenfläche zeichnen, so kann man die weiteren als Objekte der Klasse Pen erstellen.
Standard-Turtle: blau2. Turtle t2: rot
Programm import turtle as timport random as rt.reset()t2 = t.Pen()t.color('blue')t2.color('red')for i in range(20): t.goto(r.randint(-200,200),r.randint(-200,200)) t2.goto(r.randint(-200,200),r.randint(-200,200))