15
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

Embed Size (px)

Citation preview

Page 1: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

Inf K1/2 Sj 13/14 GZG FN W.Seyboldt1

SFZ FN Sj. 13/14

Python 2 Turtle

Page 2: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 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

Page 3: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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

Page 4: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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)

Page 5: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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

Page 6: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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):

Page 7: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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

Page 8: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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

Page 9: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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.

Page 10: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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

Page 11: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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.

Page 12: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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.

Page 13: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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 …

Page 14: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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):

Page 15: Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python 2 Turtle

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))