Level 2Stjerner og galaksar

Skrevet av: Omsett frå Code Club UK

Oversatt av: Stein Olav Romslo

Kurs: Python
Tema: Tekstbasert
Fag: Programmering, Kunst og håndverk
Klassetrinn: 8.-10. klasse
Bilde av BokmålPå Bokmål

Introduksjon

I denne oppgåva skal me bruke funksjonar for å gjere programma me skriv enklare og meir oversiktlege.

Steg 1: Teikne stjerner

checkSjekkliste

  • from turtle import *
    
    # Denne koden teiknar ei lita grå stjerne på ein mørkeblå bakgrunn
    color("WhiteSmoke")
    bgcolor("MidnightBlue")
    
    pendown()
    begin_fill()
    
    # Teikn stjerna
    for side in range(5):
        left(144)
        forward(50)
    
    end_fill()
    penup()
    
    forward(100)
    done()
    
    Bilete av ei sky med ei stjerne og skjelpadde
  • from turtle import *
    
    # Ein funksjon for å teikne stjerner
    # 'def' er kort for 'define' (definer) på engelsk
    def drawStar():
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(50)
        end_fill()
        penup()
    
    # Denne koden teiknar ei lita grå stjerne på ein mørkeblå bakgrunn
    color("WhiteSmoke")
    bgcolor("MidnightBlue")
    
    # Bruk funksjonen til å teikne stjerner!
    drawStar()
    forward(100)
    drawStar()
    left(120)
    forward(150)
    drawStar()
    
    hideturtle()
    done()
    
    Bilete av sky med tre stjerner

    hideturtle() gøymer skjelpadda.

    Du har sett og brukt funksjonar før. Til dømes er penup()og pendown() funksjonar. Den nye drawStar()-funksjonen din virkar på same måte. No som du har ein funksjon for å teikne ei stjerne treng du ikkje tenke på kva kommandoar du må skrive for å teikne dei, du kan berre kalle funksjonen, så teiknar den stjerna for deg!

Steg 2: Sende verdiar inn i funksjonar

Funksjonen du laga i førre steg teiknar ei like stor stjerne kvar gong. Kva om du vil teikne stjerner med ulike storleikar? Ein måte du kan gjere det på er å lage ulike funksjonar, som drawBigStar(), drawMediumStar() og drawSmallStar().

Ein betre måte å gjere det på er å sende inn verdiar til funksjonen drawStar() for å fortelje kva storleik du vil ha. Du har allereie brukt fleire funksjonar som tek imot verdiar på denne måten. Til dømes tek forward(100) inn 100, og gjer at skjelpadda går 100 pikslar framover.

checkSjekkliste

  • from turtle import *
    
    # Ein funksjon for å teikne ei stjerne med bestemt storleik
    def drawStar(starSize):
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(starSize)
        end_fill()
        penup()
    
    # Denne koden teiknar ei lita grå stjerne på ein mørkeblå bakgrunn
    color("WhiteSmoke")
    bgcolor("MidnightBlue")
    
    # Bruk funksjonen til å teikne stjerner i ulike storleikar!
    drawStar(50)
    forward(100)
    drawStar(30)
    left(120)
    forward(150)
    drawStar(70)
    
    hideturtle()
    done()
    
    Bilete av sky med tre stjerner
  • Bilete av korleis Python handsamar parametrar
  • from turtle import *
    
    # Ein funksjon for å teikne ei stjerne med bestemt storleik og farge
    def drawStar(starSize, starColour):
        color(starColour)
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(starSize)
        end_fill()
        penup()
    
    color("WhiteSmoke")
    bgcolor("MidnightBlue")
    
    # Bruk funksjonen til å teikne stjerner i ulike storleikar!
    drawStar(50, "Red")
    forward(100)
    drawStar(30, "White")
    left(120)
    forward(150)
    drawStar(70, "Green")
    
    hideturtle()
    done()
    

    Ser du kva endringar som er gjort i koden?

    Bilete av tre stjerner med ulike farger

Utfordring

Lag ein funksjon for å teikne planetar og kall den drawPlanet(). Send inn verdiar i funksjonen slik at du kan bestemme kor stor den skal vere og kva farge den skal ha.

Steg 3: Tilfeldige stjerner

No skal me bruke drawStar() til å teikne stjerner på tilfeldige stader rundt på skjermen.

checkSjekkliste

  • from turtle import *
    
    # Ein funksjon for å teikne ei stjerne med bestemt storleik og farge
    def drawStar(starSize, starColour):
        color(starColour)
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(starSize)
        end_fill()
        penup()
    
    # Set bakgrunnsfarga
    bgcolor("MidnightBlue")
    
    # Flytt til ein bestemt posisjon (x=200, y=200)
    penup()
    setpos(200, 200)
    pendown()
    
    drawStar(50, "White")
    
    hideturtle()
    done()
    
  • Bilete av ei stjerne i eit koordinatsystem
  • from turtle import *
    from random import *
    
    # Flyttar skjelpadda til tilfeldig posisjon
    def moveToRandomLocation():
        penup()
        setpos(randint(-400, 400), randint(-400, 400))
        pendown()
    
    # Teiknar ei stjerne
    def drawStar(starSize, starColour):
        color(starColour)
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(starSize)
        end_fill()
        penup()
    
    # Mørkeblå bakgrunn
    bgcolor("MidnightBlue")
    
    # Teiknar 30 stjerner med tilfeldig storleik og posisjon
    for star in range(30):
        moveToRandomLocation()
        drawStar(randint(5, 25) , "White")
    
    hideturtle()
    done()
    
    Bilete av ein stjernehimmel

    Køyr koden fleire gonger. Ser du at den teiknar stjernene ulike plassar kvar gong? Prøv å teikne fleire stjerner i fleire ulike storleikar og farger.

    Linja from random import * gjer at me får tilgang på funksjonen randint(a,b). Viss me skriv randint(5, 25) gir denne funksjonen oss eit tilfeldig tal som er større enn eller lik 5 og mindre enn 25.

Steg 4: Funksjonar inne i funksjonar

Du kan skrive funksjonar som køyrer andre funksjonar. Dette gjer det enklare å ha oversikt når ein lagar store program.

checkSjekkliste

  • from turtle import *
    from random import *
    
    # Flyttar skjelpadda til tilfeldig posisjon
    def moveToRandomLocation():
        penup()
        setpos(randint(-400, 400), randint(-400, 400))
        pendown()
    
    # Teiknar ei stjerne med bestemt storleik
    def drawStar(starSize, starColour):
        color(starColour)
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(starSize)
        end_fill()
        penup()
    
    # Teiknar ei lita galakse med stjerner
    def drawGalaxy(numberOfStars):
        starColours = ["#058396","#0275A6","#827E01"]
        moveToRandomLocation()
        # Teiknar mange små, farga stjerner
        for star in range(numberOfStars):
            penup()
            left(randint(-180, 180) )
            forward(randint(5, 20) )
            pendown()
            # Teiknar ei lita stjerne med tilfeldig farge
            drawStar( 2, choice(starColours) )
    
    speed(11)
    
    # Mørkeblå bakgrunn
    bgcolor("MidnightBlue")
    
    # Teiknar 30 kvite stjerner med tilfeldig storleik og plassering
    for star in range(30):
        moveToRandomLocation()
        drawStar(randint(5, 25) , "White")
    
    # Teiknar 3 små galaksar med 40 stjerner
    for galaxy in range(3):
        drawGalaxy(40)
    
    hideturtle()
    done()
    
    Bilete av ein stjernehimmel med galaksar

    Ved å køyre drawGalaxy(40) 3 gonger får me 3 nye galaksar som kvar inneheldt 40 stjerner. For kvar galakse blir drawStar() køyrt 40 gonger. Mellom kvar gong flyttar skjelpadda seg litt og teiknar den neste stjerna. Ser du kor i koden dette skjer?

  • from turtle import *
    from random import *
    
    # Flyttar skjelpadda til tilfeldig posisjon
    def moveToRandomLocation():
        penup()
        setpos(randint(-400, 400), randint(-400, 400))
        pendown()
    
    # Teiknar ei stjerne med bestemt storleik
    def drawStar(starSize, starColour):
        color(starColour)
        pendown()
        begin_fill()
        for side in range(5):
            left(144)
            forward(starSize)
        end_fill()
        penup()
    
    # Teiknar ei lita galakse med stjerner
    def drawGalaxy(numberOfStars):
        starColours = ["#058396","#0275A6","#827E01"]
        moveToRandomLocation()
        # Teiknar mange små, farga stjerner
        for star in range(numberOfStars):
            penup()
            left(randint(-180, 180) )
            forward(randint(5, 20) )
            pendown()
            # Teiknar ei lita stjerne med tilfeldig farge
            drawStar( 2, choice(starColours) )
    
    # Teiknar eit stjernebilete
    def drawConstellation(numberOfStars):
        moveToRandomLocation()
        # Teiknar alle stjernene, bortsett frå den siste
        # kopla saman med linjer, som dette: *--*--*--
        for star in range(numberOfStars-1):
            drawStar(randint(7, 15) , "white")
            pendown()
            left(randint(-90, 90) )
            forward(randint(30, 70) )
        # Teiknar den siste stjerna
        drawStar(randint(7, 15) , "White")
    
    speed(11)
    
    # Mørkeblå bakgrunn
    bgcolor("MidnightBlue")
    
    # Teiknar 30 kvite stjerner med tilfeldig storleik og plassering
    for star in range(30):
        moveToRandomLocation()
        drawStar(randint(5, 25) , "White")
    
    # Teiknar 3 små galaksar med 40 stjerner
    for galaxy in range(3):
        drawGalaxy(40)
    
    # Teiknar to stjernebilete, kvar med eit tilfeldig antal stjerner
    for constellation in range(2):
        drawConstellation(randint(4, 7))
    
    hideturtle()
    done()
    
    Bilete av stjernehimmel med stjernekonstellasjonar

Utfordring

Programmer skjelpadda til å teikne ditt eige bilete. Bruk funksjonar der du kan, spesielt til ting du skal gjere fleire gonger. Prøv å bruke funksjonar du kan sende inn verdiar i.

Døme

Bilete av ei blomstereng
Bilete av himmel med fuglar og skyer

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!