Turtle

Et simpel turtle program

#Et simpel turtle program
from turtle import * 

forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)

Resultat

_
_

Det koden siger er:

  1. Alt efter # bliver ignoreret - på den måde kan man indsætte kommentarer, notater og beskrivelser i koden
  2. Importer turtlekommandoerne
  3. Bevæg cursoren 100 frem
  4. Drej cursoren 90° til venstre
  5. Bevæg cursoren 100 frem
  6. Drej cur...
  7. ...

De simple kommandoer er her:

Kommando Resultat Alternativer
forward() Fremad - længden angives i parantesen fd()
backward() Tilbage - længden angives i parantesen bd() | back()
left() Til venstre - vinklen angives i parantesen lt()
right( *værdi*) Til højre - vinklen angives i parantesen rt()

Cirkelbuer

Lad os tegne en simpel cirkel

#cirkelbue
from turtle import *

circle(100)
_

Herunder kan du se hvad der sker.

_

Tallet i parantesen angiver afstanden til cirkelens centrum vinkelret på retning markøren har.

Dele af cirkelbuen

Man kan tegne en mindre del af cirkelbuen ved at sætte et komma, og tilføje antallet af grader.

90° 180° 270°
#cirkelbue 90°
from turtle import *

circle(100,90)
#cirkelbue 180°
from turtle import *

circle(100,180)
#cirkelbue 270°
from turtle import *

circle(100,270)
_ _ _

Herunder er eksempel hvor jeg tegner en linie, med en cirkelbue på midten:

#eksempel med cirkelbue
from turtle import *

forward(100)
right(90)
circle(50,180)
right(90)
forward(100)
_

Dette kan være et god redskab til at træne afstands og vinkelforståelse.

Man kan anvende det til at træne

  • koordinatsystem
  • Afstandforståelse
  • Vinkler
  • målestoksforhold

Polygoner med cirkelfunktionen

Cirkelfunktionen kan også bruges til at tegne polygoner

#tegne trekant med cirkelfunktionen
from turtle import *

circle(100,360,3)
_
Firkant Femkant Sekskant
#firkant med cirkelfunktionen
from turtle import *

circle(100,360,4)
#femkant med cirkelfunktionen
from turtle import *

circle(100,360,5)
#sekskant med cirkelfunktionen
from turtle import *

circle(100,360,6)
_ _ _

Gentagelser (løkker)

I starten lavede vi et kvadrat. Det kan gøre smartere, end vi gjorde det.

Lad os kigge på koden en gang til:

	#kode før gentagelse (for i in ...)
from turtle import *

forward(100)   
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)

Læg mærke til at at vi gentager de to linier med forward og left 4 gange efter hinanden.

Det kan vi skrive på følgende måde:

#kode med gentagelse
from turtle import *

for i in range(4):
    forward(100)
    left(90)

Kodestumpen for i in range(4) gør, at alt der står under den bliver gentaget 4 gange.

Læg mærke til at for i in range(4) bliver afsluttet af et kolon, og at de kommandoer der skal gentages er rykket ind under linien.

Her er det gjort med Tab, men det kan også fin gøres med mellemrum

Det kan vi udnytte til at lave drejninger med. Se nedenstående kode:

#kode hvor figur drejes
from turtle import *

for i in range(8):

    for i in range(4):
        forward(100)
        left(90)

    right(45) #da 360/8=45
_

Det koden siger er:

Gentag følgende 8 gange.

  • Tegn en firkant
  • drej cursoren 45°

Vi kan endda få Python til at regne for os. Lad os lave en kode der drejer firkanten 17 gange før den når "tilbage".

#drejning af firkant 17 gange
from turtle import *

for i in range(17):

    for i in range(4):
        forward(100)
        left(90)

    right(360/17) 

Som du kan se i den sidste linie, så får vi Python til selv at beregne hvor mange grader den skal dreje firkanten for at komme "hele vejen rundt" ved at skrive right(360/17).

goto()

En sidste funktion vi skal have dækket er goto(). Med denne kommando kan vi lade "turtlen" springe til et koordinatsæt, uden at bekymre os om hverken afstand eller vinkel.

Se eksempelt herinder hvor jeg tegner et hus

# kode med goto funktion
from turtle import *
forward(200)
left(90)
forward(100)
goto(100,150) #Her starter taget
goto(0,100) #Her slutter taget
left(180)
forward(100)

Penkontrol

Kommando Resultat Alternativ
pensize() Stregens tykkelse width()
penup() Løfter pennen (ingen streg) pu() | up()
pendown() Sætter penne ned (laver streg) pd() | down()
speed() Cursorens hastighed. 3 er normal hastighed, 11+ er meget hurtigt
undo() Fjern sidste kommando

Her er et eksempel:

#kode med eksempler på penkontrol
from turtle import *

forward(100)
pensize(10) #sæt størrelse til 10
forward(100)
pensize(2) #sæt størrelse til 2
forward(100)
penup() #løft pennen
forward(100)
pendown() #sæt pennen ned igen
forward(100)

Resultat

Farver

Herunder vil det blive vist hvordan man farvelægger sine værker. Mange farver kan man få ved at angive deres navn mellem to situationstegn

"white" "grey66" "grey33" "black"
"red1" "red2" "red3" "red4"
"orange1" "orange2" "orange3" "orange4"
"yellow1" "yellow2" "yellow3" "yellow4"
"green1" "green2" "green3" "green4"
"blue1" "blue2" "blue3" "blue4"

Du kan få et overblik over farvenavne her: https://www.tcl.tk/man/tcl/TkCmd/colors.htm

Farve på streg

For at farvelægge stregen anvender man pencolor(*farvenavn*):

#ændre stregfarven
from turtle import *

pensize(5)
pencolor("red1") #ændr farven til red1
circle(100)

Farve på figuren

For at farvelægge ens konstruktioner, skal man gøre to ting:

  1. Angive farven - fillcolor()
  2. Fortælle hvor fyldningen starter - begin_fill()
  3. --- og hvor den slutter - end_fill()
# udfyld figur
from turtle import *

pensize(5)
fillcolor("red1") #farve på indholdet
begin_fill() #Start med at fylde ud
circle(100)
end_fill() #Slut med at fylde ud

color()

Hvis man både skal bruge en streg- og en fyldfarve, kan man anvende funktionen color(). I parantesen angiver man streg- og fyldfarven adskilt af et komma: color(*stregfarve*,*fyldfarve*)

#anvendelse af color funktionen
from turtle import *

pensize(5)
color("red1", "green1")
begin_fill()
circle(100)
end_fill()

Hvis man kun skriver en farve i color, f.eks. color("red1"), så bliver både stregen og fyldes samme farve.

#anvendelse af color funktionen til at sætte fælles farve for streg og indhold
from turtle import *

pensize(5)
color("blue1")
begin_fill()
circle(100)
end_fill()

Flere farver

Man er ikke begrænset af de farver som defineret er i TK farvesættet. Man kan også vælge at angive den hexadecimale kode for en farve. f.eks:

Man angiver koden ved at et # og en seks-cifret kode derefter f.eks:

#eksempel på selvvalgte farver
from turtle import *

pensize(20)
color("#FF8C00")
forward(200)
color("#808000")
forward(200)
color("#00BFFF")
forward(200)

Du kan finde flere farver her: https://www.google.com/search?q=colorpicker&oq=colorpicker

Farven aflæses til venstre og du finder din farve ved at flytte rundt på cirklen og skyderen neden under.

Variabler

Variabler bruges til at gemme værdier i. I denne sammnhæng vil vi bruge det til at gøre koden mere læselig. Se nedenstående eksempel:

#brug af variabler i kode 01
from turtle import *

længde = 200
vinkel = 90

for i in range(4):
    forward(længde)
    left(vinkel)

Det er en metode vi kan bruge til to ting:

  1. Gøre koden mere læsbar
  2. Ved at have værdien stående et sted kan den genanvendes flere andere steder.

Herunder har jeg lavet et program, der ud fra længde og n kanter tegner en polygon

#brug af variabler i kode 02 	
#tegn en n-kant (polygon)
from turtle import *

længde = 100
antal_kanter = 7

for i in range(antal_kanter): #koden skal køre antal_kanter gange
    forward(længde)
    left(360/antal_kanter) #drej med 360° divideret med antal_kanter

Regler for for variabler

  • Variabelnavne skal starte med bogstaver eller _ (underscore):
  • Eksempler: længde, bredde, _første

  • Variabel navne må ikke være funktioner i Python eller din kode:
  • Eksempler: import, from, for, in, range ...

  • Variabelnavne er case-sensitive (store/små bogstaver)
  • Antal og antal er to forskellige variabler

Gode råd

  • Brug beskrivende variabelnavne og adskild med _ (underscore) hvis der er flere ord
  • Eksempler: antal_forsøg, start_værdi

  • Brug kun små bogstaver til variabelnavne
  • Brug aldrig æ, ø og å hvis koden skal anvendes internationalt.

Funktioner

HVis man ved man skal tegne den samme figur flere gange kan man lave figuren som funktion. Forestil dig at vi skal tegne mange firkanter, men de er lidt forskellig størrelse.

# Eksempel på funktion
from turtle import *

def firkant(længde,bredde): #laver funktionen firkant
    
    for i in range(2):
        forward(længde)
        left(90)
        forward(bredde)
        left(90)

pensize(5)        
firkant(300,150) # den anden firkant 300 * 150
pencolor("red1")
firkant(200,100) # den anden firkant 200 * 100
pencolor("orange1")
firkant(100,50) # den første firkant 100 * 50

På mange måder minder dette om det vi gjorde ovenfor i variabler. Vi kan omskrive programmet der tegner polygoner på følgende måde:

#Omskrivning af polygonkode fra variabel afsnittet
from turtle import *

def polygon(længde, antal_kanter):

    for i in range(antal_kanter): #koden skal køre antal_kanter gange
        forward(længde)
        left(360/antal_kanter) #drej med 360° divideret med antal_kanter

pensize(5)
pencolor("red1")
polygon(100,7) #første polygon
forward(200)
pencolor("green1")
polygon(70,5) #anden polygon
forward(170)
pencolor("blue1")
polygon(60,9) #tredie polygon

Valg (if/else)

Indtil (while)

Opgaver

Opgave 1

  1. Tegn en rektangel med siderne 200 og 70
  2. Tegn en ligesidet trekant med sidelængden 120
Løsning opgave 1 a,b
_

Henvisninger

https://opentechschool.github.io/python-beginners/en/simple_drawing.html

https://docs.python.org/3.7/library/turtle.html