Lektion 3: Sköldpaddsvärlden
Syfte: | Öva villkors- och iterationssatser. |
Begrepp som introduceras: | Objekt |
Arbetsform: | Arbeta gärna tillsammans med någon men skriv egen kod. Diskutera med varandra! |
Arbetstid: | 2 timmar |
Redovisning: | Ingen obligatorisk redovisning, men diskutera med handledare om det är något du är osäker på! |
Turtle-världen och dess invånare
Med standarddistributionen av Python kommer en modul turtle
.
Med den kan man rita upp en värld med objekt (sköldpaddor, paddor) som
kan rör sig och rita figurer.
Det är huvudsakligen tänkt som ett pedagogiskt hjälpmedel men
kan även användas för att rita t.ex. grafer, kurvor och diagram.
Vi börjar med att vid kommando-promptern >>>
skriva
(antingen i ett terminalfönster där du startat python3 eller i IDLEs kommandoruta).
-
Importera
turtle
-modulen:
>>>import turtle
-
Skapa en padda:
>>>t = turtle.Turtle()
Denna sats öppnar ett fönster och placerar en liten "figur" i mitten. Fönstret har ett (tänkt) koordinatsystem med origo i mitten (där paddan står) och x- och y-axlarna på vanligt sätt åt höger respektive uppåt.
Variabeln t
refererar nu till en sköldpadda.
En padda har ett antal metoder som man kan använda för att "beordra" den att göra olika saker.
En metod är en funktion som är kopplad till ett speciellt objekt (paddan i detta fall).
För att använda en metod använder man punktnotation.
Jämför metoden append
för listobjekt!
Exempel: Vi kan be paddan att anta ett mer sköldpaddslikt utseende med kommandot
>>> t.shape('turtle')
.
Prova följande satser i tur och ordning efter >>>:
-
>>>
t.forward(100)
-
>>>
t.left(90)
-
>>>
t.forward(100)
-
>>>
t.circle(100)
Skapa nu en ny fil (starta först IDLE3 om du inte redan har gjort det).
Klistra in vidstående kod som illustrerar en lite mer avancerad figur:
Spara och kör!
Prova andra färger (gissa namnen!) samt längden (200) och vinkeln (170) och se vilka effekter det får!
Paddorna ha en stor mängd metoder. För att se alla metoder kan man (under förutsättning att man importerat turtle-modulen) få en förteckning med kommandot
>>> dir(turtle)
För att få information om en speciell metod kan man använda kommandot help
. Exempel:
>>>help(turtle.forward)
De viktigaste metoderna finns samlade i minilektionen om turtlegrafik. Det finns också en officiell dokumentation
Vi ska nu använda paddorna för att exemplifiera och öva på det vi hittills gått igenom, bl.a. if
-
och while
-satser.
Tips: Om du använder flaggan -i
när du ska köra koden d.v.s. ger kommandot
python -i filnamn
Övningar
Koden för dessa uppgifter ska lagras på en fil och testas.-
Skriv ett program som frågar användaren efter en längd och sedan ritar en liksidig
triangel med detta värde som sidlängd
import turtle side = int(input("Sidlängd: ")) t = turtle.Turtle() for i in range(3): t.forward(side) t.left(120)
Bättre med en loop än så kallad "rakkod":t.forward(side) t.left(120) t.forward(side) t.left(120) t.forward(side)
-
Modifiera koden så att den fyller triangeln med röd färg.
(Metoderna
fillcolor
,begin_fill
ochend_fill
)import turtle side = float(input("Sidlängd: ")) t = turtle.Turtle() t.fillcolor('red') t.begin_fill() for i in range(3): t.forward(side) t.left(120) t.hideturtle() # Mer estetiskt utan paddan t.end_fill()
-
Modifiera koden så att den också frågar efter färg.
Färgen ska skrivas som
white
,red
,blue
,...import turtle side = float(input("Sidlängd: ")) t = turtle.Turtle() color = input("Färg: ") # color får typen string t.fillcolor(color) # som kan användas som indata till fillcolor t.begin_fill() for i in range(3): t.forward(side) t.left(120) t.hideturtle() t.end_fill()
-
Skriv kod som, med hjälp
forward
ochleft
i enfor
-sats (100 steg) ritar en spiral:Tips: För att få en spiral behöver man variera vinkeln och/eller sträckan. Prova båda!
Figuren är gjord med denna kod:t = turtle.Turtle() for i in range(100): t.forward(i) t.left(30 - i/10)
-
Modifiera spiralkoden så att den avbryter när avståndet till origo är större än 200.
Använd metoden
distance
t = turtle.Turtle() i = 0 while t.distance(0, 0) < 200: t.forward(i) t.left(30 - i/10) i += 1
-
Skriv en funktion som ritar två perioder av en sinuskurva enligt vidstående figur.
Tips:
goto
är bästa metoden att använda.Kom ihåg:
math.sin
vill ha argument i radianer.import turtle import math t = turtle.Turtle() t.speed(0) t.hideturtle() t.fillcolor('SkyBlue') t.begin_fill() for i in range(-360, 361, 10): x = i*math.pi/180 t.goto(x*50, 200*math.sin(x)) t.home() t.end_fill()
Denna sida visar vilka färger man kan välja mellan.
-
Skriv kod som ritar den franska flaggan mitt i rutan. Ränderna är 100 breda och 200 höga vilket ger flaggan rätt proportioner.
Ledning: Själva ritandet behöver inte ta mer än 10 rader men det krävs att man har en yttre iteration över rektanglarna och att dessa görs med en iteration över sidorna.
Bra att läsa på lösningen!
import turtle t = turtle.Turtle() size=100 t.penup() t.goto(-size*1.5, -size) # Gå till nedre vänstra hörnet t.pendown() t.hideturtle() colors = ['blue', 'white', 'red'] sides = [size, 2*size, size, 2*size] for c in colors: # iterera över färgerna t.fillcolor(c) t.begin_fill() for side in sides: # iterera över sidorna t.forward(side) t.left(90) t.end_fill() t.forward(size) # Gå till nästa färgrand
Gå till nästa lektion eller gå tillbaka