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: | Schemalagd handledningstid: 2 timmar. Utöver det räkna med eget arbete med lika många timmar. |
Redovisning: | Ingen obligatorisk redovisning, men diskutera med handledare om det är något du är osäker på! |
Backup: | När du arbetar på egen dator måste du se till att det löpande görs backup på de filer (py-filer) som du skapar under kursens gång. Om du har filerna enbart lagrade på din dator finns risk att allt försvinner vid ett datorhaveri eller vid stöld. |
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.
Starta Thonny.
Vi börjar med att skriva kod i interactive mode, dvs i det nedre fönstret i Thonny, dvs shell-fönstret.
Efter promptern >>>
.
![]() |
Satsen t = turtle.Turtle() öppnar ett fönster och placerar en väldigt 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. ![]() |
Satsen t = turtle.Turtle()
innebär att vi skapar en variabel t
som refererar 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 >>> t.shape('turtle') .![]() |
Prova följande satser i tur och ordning efter >>>:
|
I resterande del av lektionen skall du arbeta i script mode, dvs skriva satserna i Thonny's editor och skapa några python-filer (program).
För att få lite ordning och reda kan det vara bra att du börjar med att skapa en mapp för de filer (program) du kommer skapa i denna lektion, dvs enligt samma
princip du gjorde i lektion 2.
Klistra in vidstående kod som illustrerar en lite mer avancerad figur: Spara koden i en fil med namnet ex1 och kör!
Prova andra färger (gissa namnen!) samt längden (200) och vinkeln (170) |
import turtle
t = turtle.Turtle()
t.hideturtle()
t.color('blue', 'light blue')
t.begin_fill()
for i in range(36):
t.forward(200)
t.left(170)
t.end_fill()
|
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 (i shell-fönstret)
>>> 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.
Övningar
Koden för dessa övningar ska lagras på varsin fil och testas.Tips:
- Fundera först på hur det kan lösas. Vilka turtle-metoder behövs...
- Skriv därefter din egen lösning som kod, börja med enkel lösning och testkör.
- Bygg på koden vartefter och testkör.
- Du får säkert modifiera koden många ggr innan det blir riktigt bra.
När program skall skrivas finns normalt ingen entydig exakt kod som svar, ty man kan skriva program som löser samma problem på många olika sätt. Om du gör din egen lösning och sedan jämför med lösningsförslaget, skiljer sig säkert dessa åt. Du har därmed sett två olika lösningar och detta lär man sig på.
-
Skriv ett program (en pythonfil
ovn1
) som frågar användaren efter en längd och sedan ritar en liksidig triangel med detta värde som sidlängdimport 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)
-
Skriv en ny version av föregående program så att det fyller triangeln med röd färg. Kalla pythonfilen för
ovn2
.
Tips 1: Kopiera kod från filenovn1
.
Tips 2: Metoder för fyllning: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()
-
Skriv en ny version av föregående program så att det också frågar efter färg att fylla med. Kalla pythonfilen för
ovn3
.
Tips 1: Kopiera kod från filenovn2
.
Färgen ska skrivas somwhite
,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 ett program som med hjälp av metoderna
forward
ochleft
i enfor
-sats (100 steg) ritar en spiral, se vidstående figur.
Namnge programmet tillovn4
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
. Namnge programmet tillovn5
t = turtle.Turtle() i = 0 while t.distance(0, 0) < 200: t.forward(i) t.left(30 - i/10) i += 1
-
Skriv ett program (
ovn6
), 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 ett program (
ovn7
) 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