Introduksjon
Skilpadder (turtles på engelsk) er en form for roboter som har vært i bruk innen programmering i lang tid. Vi vil bruke skilpadde-biblioteket i Python til å utforske flere programmeringskonsepter samtidig som vi tegner kule bilder.
Steg 1: Møt skilpadden
For å bruke skilpadder i Python må vi importere et bibliotek som heter
turtle
. Slike biblioteker kalles modules i Python og brukes mye
for å organisere og gjenbruke kode som andre har skrevet. Det finnes
flere måter å importere biblioteker på i Python. Vi vil her bruke den
enkleste, hvor vi starter alle skilpaddeprogrammene våre med linjen
from turtle import *
Her betyr *
alt, slik at linjen sier Importer all kode fra turtle-biblioteket
.
Turtles
Navnet Turtle betyr skilpadde på norsk. Bakgrunnen til dette navnet er historisk. For nesten 70 år siden bygde William Grey Walter et par roboter som kunne bevege seg rundt. Disse beveget seg ganske sakte, og var lave og skallformet. De fikk derfor etterhvert kallenavnet skilpadder.
Senere ble måten disse skilpaddene beveget seg på (vi skal se hvordan snart) tatt inn i forskjellige programmeringsspråk, spesielt som en måte å tegne på. Språket Logo er nok det som er mest kjent for slik skilpaddegrafikk, men nesten alle programmeringsspråk støtter dette i dag, inkludert for eksempel Scratch, Lua og Python.
Sjekkliste
-
Det er på tide å lage vår første skilpadde. Start IDLE og åpne et nytt programmeringsvindu. I dette nye vinduet kan du skrive inn følgende kode:
from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow')
Lagre programmet med navnet
skilpadde.py
og kjør det. Du skal nå få opp et nytt vindu med en gul skilpadde på en blå bakgrunn. Hvis dette ikke skjer kan du se i det opprinneligePython Shell
-vinduet om du har fått en feilmelding. -
La oss se litt nøyere på hva programmet gjør så langt. Det er en god ide å prøve å endre på ting i programmet for å se effekten av endringene og bedre forstå hvordan ting virker.
-
Linjen
shape('turtle')
sier at vi vil bruke en skilpaddefigur. I stedet forturtle
kan du også prøvearrow
,circle
,square
,triangle
ellerclassic
. -
Med
shapesize(2)
forteller vi programmet hvor stor vi vil at skilpaddefiguren skal være. Prøv med andre tall! -
Kommandoene
bgcolor
ogcolor
bestemmer fargene på henholdsvis bakgrunnen og på skilpaddefiguren. Python kjenner til veldig mange farger (men bare på engelsk), så prøv om du kan endre fargene til noe du liker. -
I de senere programmene vil vi bruke disse linjene på toppen. Du kan gjerne bruke en variant av farger og figur som du liker bedre i stedet.
Steg 2: En kunstnerisk skilpadde
Skilpadden er ikke bare fin å se på. Den kan også tegne! I dette steget vil vi bli kjent med noen enkle kommandoer som gjør skilpadden om til en kunstner.
Sjekkliste
-
Legg til en linje nederst i programmet ditt, slik at det ser slik ut:
from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') forward(200)
-
Når du kjører programmet vil du se at skilpadden har beveget seg forover et lite stykke, og at den har tegnet en strek der den beveget seg.
-
I tillegg til
forward
kan vi også bruke kommandoenebackward
for å gå bakover,left
for å svinge mot venstre ogright
for å svinge mot høyre. Prøv for eksempel å endre programmet ditt til det følgende:from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') forward(200) left(60) forward(50) backward(200) right(90) forward(100)
Ser du at skilpadden utfører alle kommandoene du gir den?
-
Hvis vi setter sammen kommandoene litt systematisk kan vi tegne noen grunnleggende geometriske figurer. For eksempel, om vi vil tegne en firkant kan vi først gå fremover, deretter svinge 90 grader (mot høyre eller venstre), deretter fremover igjen, så svinge, så fremover, så svinge og til slutt fremover en gang til. I Python kan vi skrive dette som
from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') forward(100) right(90) forward(100) right(90) forward(100) right(90) forward(100) right(90)
Tegner skilpadden en firkant når du kjører dette programmet?
-
Hva med en trekant? Hvordan må du forandre koden din for at skilpadden skal tegne en trekant i stedet for en firkant? Prøv selv å endre koden og kjør den, ble resultatet som du trodde?
Steg 3: Gjenta deg selv
Hvis du ser på koden vi har brukt for å tegne trekanter og firkanter har vi stadig gjentatt oss selv. I stedet for at vi skriver samme kode om og om igjen kan vi be Python gjenta deler av koden. Til dette bruker vi for-løkker.
Sjekkliste
-
Det følgende programmet tegner også en firkant, akkurat som det tidligere programmet vi lagde:
from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') for i in range(4): forward(100) right(90)
Endre koden din som over, og kjør programmet.
-
Legg merke til at linjene som kommer etter
for
er skjøvet inn til høyre. Dette er veldig viktig i Python, fordi det forteller hvor mye kode som skal gjentas i løkken. For å skyve koden inn på denne måten kan du brukeTab
-tasten i IDLE. For å trekke koden tilbake til venstre kan du trykkeShift
ogTab
. -
Prøv å trekk linjen
right(90)
til venstre, slik at for-løkken ser slik ut:for i in range(4): forward(100) right(90)
Hva tror du programmet ditt vil gjøre nå? Forsøk å kjøre programmet for å se om du har rett!
Skilpadden vil bare gå fremover fire ganger før den svinger til høyre en gang til slutt. Det betyr at den vil tegne en rett linje i stedet for en firkant.
-
Nå som vi bruker en for-løkke har det også blitt mye enklere å endre koden til å for eksempel tegne en trekant. Vi må endre 4 til 3 i for-løkken. I tillegg må vi endre vinkelen skilpadden snur ved hvert hjørne. For at skilpadden skal gå en runde rundt trekanten må den snu totalt 360 grader. Siden den snur tre ganger må den snu 120 grader (360 delt på 3) i hvert hjørne. Programmet for å tegne en trekant blir dermed seende slik ut:
from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') for i in range(3): forward(100) right(120)
-
Prøv å endre programmet slik at det tegner andre mangekanter. Hvordan kan du tegne for eksempel en femkant, åttekant eller kanskje en femtenkant.
Steg 5: Egne kommandoer
I Python kan vi også lage våre egne kommandoer ved å definere funksjoner. Dette er en annen måte vi kan unngå å gjenta oss selv på.
Sjekkliste
-
Vi skal nå lage en funksjon som tegner en mangekant. Dette gjør vi ved å bruke kommandoen
def
(def er en forkortelse for define som betyr definer). Endre programmet ditt slik at det ser ut som under:from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') def polygon(sides, length): angle = 360 / sides for i in range(sides): forward(length) right(angle) polygon(4, 100)
Kjør programmet. Kjenner du igjen firkanten?
-
Nå som vi har laget
polygon
-funksjonen er det kjempelett å tegne forskjellige mangekanter. Legg for eksempel til de følgende linjene nederst i programmet ditt:polygon(3, 100) polygon(4, 100) polygon(5, 100) forward(125) right(180) polygon(3, 150) polygon(5, 150) polygon(7, 150)
Steg 6: Skilpaddekunst
Vi vil til slutt generalisere funksjonen vår litt slik at den ikke bare tegner kjedelige mangekanter.
Sjekkliste
-
Vi lager nå en ny funksjon
polylines
som ligner veldig mye påpolygon
, men hvor vi også kan endre på vinklene slik at de ikke alltid summerer seg til 360. Dette gjør underverker for kunsten vår! Endre programmet ditt slik at det ser slik ut:from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') def polylines(sides, length, angle): for i in range(sides): forward(length) right(angle) polylines(5, 100, 144)
Kjør programmet. Hva tegner skilpadden nå?
-
En annen variant kan være hvor vi tegner en litt skjev mangekant. For eksempel den følgende kommandoen vil tegne firkanter hvor vinklene er 91 grader i stedet for 90 grader. Dette blir overraskende stilig. Bytt ut
polylines
-kommandoen medpolylines(91, 200, 91)
-
Vi kan også endre lengden av strekene etterhvert som vi tegner. Dette skaper en fin spiraleffekt. Legg merke til hvor mye funksjonen
spiral
ligner påpolylines
:from turtle import * shape('turtle') shapesize(2) bgcolor('darkblue') color('yellow') def polylines(sides, length, angle): for i in range(sides): forward(length) right(angle) def spiral(sides, length, angle): for i in range(sides): forward(length) right(angle) length = length + 5 spiral(100, 5, 125)
-
Prøv forskjellige verdier i stedet for 100, 5 og 125 når du kaller
spiral
. Finner du noen verdier som gir spesielt fine bilder synes du?
Prøv selv
Kombiner de forskjellige funksjonene vi har laget, polygon
,
polylines
og spiral
med de andre skilpadde-kommandoene du har lært
som for eksempel forward
og left
. Klarer du å tegne enda mer
spennende kunstverk? Eller kanskje du kan tegne en by? Et hus kan for
eksempel lages ved først å tegne en firkant og deretter en trekant på
toppen for taket.
Et tips helt på slutten er at funksjonene penup()
og pendown()
styrer om skilpadden tegner mens den flytter på seg. Disse er veldig
nyttige når man vil tegne flere figurer som ikke henger sammen.
Et annet tips er funksjonen speed()
. Denne justerer hastigheten som
skilpadden tegner med. For eksempel vil speed(1)
tegne veldig sakte,
mens speed(11)
tegner kjempefort.