InfK1_1314b_PythonTurtle

Download Report

Transcript InfK1_1314b_PythonTurtle

SFZ FN
Sj. 13/14
Python 2
Turtle
1
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Turtle


2
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.Seyboldt
Beginn der Turtle

Seymour Papert
KI-Bereich des MIT in den 1970er
Projekte für Kinder mit den Zielen:
–
–
–
–

3
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.Seyboldt
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)



4
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
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
5
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Wdh Grundlagen Python

Variable sind Speicherplätze oder Notizzettel:
int()


//
float() //
str()
Das Gleichheitszeichen ist ein Zuweisungsoperator
Anzeige:
print var1
print " 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


6
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.Seyboldt
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
7
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Aufgaben: Turtle02c / Turtle3


8
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.Seyboldt
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.
9
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Aufgabe: Turtle06

Turtle06: Zeichne mit der Turtle den abgebildeten
Kuchen.

Tipps:
circle(r,alpha)
begin_fill() …
end_fill()
zeichne mit der
Stiftfarbe des
Hintergrund
10
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Aufgabe 4: Turtle07-Turtle09



11
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.Seyboldt
Aufgabe: Olympische Ringe


Turtle10_Ringe.py
Benutze die Methode
hugo.circle(r),
um die 5 Kreise zu zeichnen.
Zur Position und Farbe der Ringe:
–
–
–
–
–
–

12
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 zeichnet
Dabei werden r, x0,y0 übergeben.
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Klasse (class) – Objekte





13
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.Seyboldt
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):
14
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
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: blau
2. Turtle t2: rot
Programm
import turtle as t
import random as r
t.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))
16
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt