Skilpaddeskolen

Steg 1: Flere firkanter

Sjekkliste

  • Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

    Som sist vil den første linjen alltid være from turtle import * for å fortelle Python at vi vil tegne ved hjelp av skilpadde-biblioteket!

    from turtle import *
    
    for n in range(4):
        forward(100)
        right(90)
    
  • Husk at for n in range(4) gjentar koden, og at koden må grupperes med mellomrom (innrykk) for å være en del av for-løkken. Bruk tab (knappen rett over caps lock) for å flytte kode.

Steg 2: Forskjellige firkanter

La oss bruke variabler for å gjøre programmet vårt lettere å lese og lettere å endre, akkurat som vi gjorde i forrige modul.

Sjekkliste

  • from turtle import *
    
    sides = 4
    length = 100
    angle = 360/sides
    
    for n in range(sides):
        forward(length)
        right(angle)
    

Dette er et litt langt program, men nå kan vi endre det til å tegne hvilken figur vi vil. Problemet er bare at vi er nødt til å klippe og lime programmet for å få det til. Som tidligere kan vi skrive kode for å slippe å gjenta oss selv (programmerere anstrenger seg gjerne litt slik at de kan være late etterpå!). Denne gangen skal vi lage en funksjon. En funksjon er en enkel måte for å gjenbruke en kodeblokk (eller oppskrift om du vil) mange ganger. Funksjonen får et navn, og dette navnet kan vi senere bruke.

Steg 3: Vi lager en funksjon

Sjekkliste

  • from turtle import *
    
    def poly(): # vi lager funksjonen
        sides = 4
        length = 100
        angle = 360/sides
    
        for n in range(sides):
            forward(length)
            right(angle)
    
    pencolor('red')
    poly() # vi kaller på funksjonen
    right(180)
    poly()
    

Vi sparte litt tid ved å lage en ny funksjon i Python, og nå kan vi tegne en rød firkant to ganger, uten å skrive hele greia to ganger. Den nye funksjonen poly() er fin for å slippe å skrive så mye.

Steg 4: Hvorfor stoppe med firkanter?

Vi er ikke ferdige ennå - hva med å endre funksjonen så den kan tegne hvilken som helst form? Som med forward og right, kan vi sende verdier inn i funksjonen istedenfor å endre koden hver gang.

Sjekkliste

  • from turtle import *
    
    def poly(sides, length):
        angle = 360/sides
    
        for n in range(sides):
            forward(length)
            right(angle)
    
    pencolor('red')
    poly(4, 100)
    right(180)
    pencolor('blue')
    poly(3, 150)
    
  • La oss ta dette litt sakte, for dette er ganske kule greier. Istedenfor å bestemme variablene i funksjonen, sier vi at funksjonen tar noen verdier som har navn, og så bruker vi verdiene der vi trenger dem.

    Vi flyttet noen verdier ut av funksjonen, og flyttet dem til den delen av koden som bruker dem. Nå kan vi, med en eneste funksjon, tegne hvilken som helst form, med hvilken som helst farge. Jeg vet ikke hva du tenker, men dette imponerer meg hver gang jeg tenker på det: Vi kan lære datamaskinen nye triks, og så få den til å gjøre triksene.

Å være i stand til å lage nye funksjoner som kan oppføre seg forskjellig basert på verdiene vi gir inn er et av de kraftigste verktøyene i programmering.

Tips

I python finnes det funksjoner, mens i andre programmeringsspråk finnes det også noe som blir kalt prosedyrer. Disse begrepene går litt inn i hverandre, så det er ikke så farlig om dere ikke ser forskjellen. En funksjon skal gjerne returnere noe, og den skal helst ikke gjøre noe annet enn å regne ut returverdien. I tillegg burde funksjonen alltid returnere det samme når den får samme innputt. Prosedyrer ligner veldig på funksjoner, men de får lov til å returnere forskjellige ting avhenging av andre ting enn innputt. I tillegg er det lov for en prosedyre å gjøre noe annet enn å returnere noe. For eksempel kan en prosedyre tegne på skjermen. I python er det ingen forskjell på funksjoner og prosedyrer, så det er vanlig å bare kalle begge deler for funksjoner.

Steg 5: Skilpaddestreker

Sjekkliste

  • from turtle import *
    
    length = 200
    for num in range(8):
        forward(length/16)
        penup()
        forward(length/16)
        pendown()
    

Steg 6: Tegne figurer

Vi kan koble figur-programmet og stiplet-linje-programmet sammen ved å bytte ut funksjonen forward med koden vi har for stiplete linjer. Vi bruker koden for å tegne figurer ytterst, og inni der bruker vi koden for å lage stiplete linjer istedenfor hele streker.

Sjekkliste

  • from turtle import *
    speed(11)
    shape("turtle")
    
    def dashpoly(sides, length):
        angle = 360/sides
    
        for n in range(sides):
            for num in range(8):
                forward(length/16)
                penup()
                forward(length/16)
                pendown()
            right(angle)
    
    pencolor('red')
    dashpoly(4, 100)
    right(180)
    pencolor('blue')
    dashpoly(3, 150)
    
  • Vi har to for-løkker inni hverandre, en ytre og en indre. Den ytre løkken for n in range(sides) tegner hver kant av figuren, og hver gang kjører den indre løkken for num in range(8) som tegner stiplete linjer.

    Den ytre løkken bruker variabelen n for å holde styr på hvor mange ganger den har gjentatt seg selv, og den indre løkken bruker variabelen num på tilsvarende måte. Du må bruke forskjellige variabelnavn inni løkken, ellers roter du det bare til.

Steg 7: Byggeklosser for figurer

Sjekkliste

  • from turtle import *
    speed(11)
    shape("turtle")
    
    def dashforward(length):
        for num in range(8):
            forward(length/16)
            penup()
            forward(length/16)
            pendown()
    
    def dashpoly(sides, length):
        angle = 360/sides
    
        for n in range(sides):
            dashforward(length)
            right(angle)
    
    pencolor('red')
    dashpoly(4, 100)
    right(180)
    pencolor('blue')
    dashpoly(3, 150)
    

Tips

Trikset er at istedenfor å bygge programmer ved å klippe og lime, kan vi lage nye funksjoner og gjenbruke dem. Da blir koden kortere og litt lettere å forstå.

Steg 8: Litt tilfeldigheter

Hva om vi gjør litt tilfeldige sprell rett før vi er ferdige? Vi kan be datamaskinen velge et tall for oss, eller velge en farge for oss, litt som om vi kaster terning. Scratch kan dette også, da brukte vi pick.

Sjekkliste

  • from turtle import *
    from random import randrange, choice
    colors = ['red', 'blue', 'green']
    
    
    def poly(sides, length):
        angle = 360/sides
    
        for n in range(sides):
            forward(length)
            right(angle)
    
    for count in range(10):
        pencolor(choice(colors))
        right(randrange(0,360))
        poly(randrange(3,9), randrange(10,30))
    
  • Programmet skal tegne ti figurer i forskjellige farger med forskjellig størrelse. Linjen from random import randrange, random henter inn funksjonene randrange() og choice().

    randrange() plukker ut et tall mellom det laveste og det høyeste tallet vi gir inn, så randrange(1, 10) velger et tall mellom 1 og 9 (Python begynner med 1, og stopper rett før 10).

    choice() velger en ting fra listen vi gir inn. En liste er en samling av verdier, for eksempel [1, 2, 3]. I koden ovenfor bruker vi listen colors, som har verdiene 'red', 'blue', and 'green'.

    Ved å bruke choice() og randrange() kan vi be datamaskinen om å velge farge, størrelse og form for oss, og det kommer til å bli forskjellig resultat nesten hver eneste gang du kjører programmet.

Flere ting å prøve

Hva med å prøve flere farger, eller å endre tallene? Hva skjer?

Forbedre denne siden

Funnet en feil? Kunne noe vært bedre? Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!

Rapporter et problemVis koden og fiks selv