Loopande sköldpaddor

Tidigare har vår sköldpadda ritat ut en kvadrat efter våra instruktioner. Men våra instruktioner var ganska upprepade: Gå \(100\) steg framåt, vrid dig \(90\) grader åt vänster, och sedan samma sak fyra gånger, en gång för varje sida på kvadraten.
Att vi upprepar oss på det här viset måste betyda att vi kan använda en loop!

Upprepade sidor

Om vi kan hitta ett mönster i vad vi försöker göra så kan vi uttrycka det mycket enklare och kraftfullare i programmering. När vi ritar kvadraten gör vi samma sak fyra gånger:

# Gå rakt fram 100 steg
# Vrid 90 grader åt vänster
# Gå rakt fram 100 steg
# Vrid 90 grader åt vänster
# Gå rakt fram 100 steg
# Vrid 90 grader åt vänster
# Gå rakt fram 100 steg
# Vrid 90 grader åt vänster

Det betyder att vi snarare kan uttrycka det såhär:

for i in range(0, 4):
    # Gå rakt fram 100 steg
    # Vrid 90 grader åt vänster

Ett komplett program blir därför att se ut såhär:

from turtle import *
color('blue')
for i in range(0, 4):
    forward(100)
    left(90)

 Att generalisera

Inom vetenskap, matematik och programmering är det en styrka att hitta mönster och kunna generalisera – att hitta och använda en formel som beskriver flera samband.

Tidigare skapade vi ett program för att välja vilken figur en sköldpadda skulle rita och hade kvadrat och triangel som alternativ. Men om vi vill ha fler?

Vinkelsumman av en regelbunden geometrisk figur med \(n\)-sidor kan räknas ut såhär:

$$\texttt{Vinkelsumman}=180\cdot(n-2)$$

Det betyder att varje innervinkel, om det finns \(n\)-sidor, är:

$$\text{Vinkel} = \frac{\texttt{Vinkelsumman}}{n}=\frac{180\cdot(n-2)}{n}$$

Sköldpaddan ska bara vrida sig yttervinkeln av detta, så det blir lite mer komplicerat:

$$\text{Vinkel} = 180 - \frac{\texttt{Vinkelsumman}}{n}=180 - \frac{180\cdot(n-2)}{n}=180\cdot\frac{2}{n}$$

Det här kan vi använda för att låta sköldpaddan rita vilken figur som helst!

Vi börjar med att inkludera de delar som behövs:

import turtle 

turtle.color('red')

Sen behöver vi fråga hur många sidor som sköldpaddan ska rita upp:

n = int(input("Hur många sidor?"))

Här kan vi också se till att det inte blir fel. Till exempel kanske användaren skriver in \(2\) eller \(1\). Men det räcker ju inte för en hel figur, vi måste åtminstone ha \(3\). Vi kan lösa det med en if-sats:

if n < 3:
    print("Du måste ange minst tre!")
    n = 3

När vi vet hur många sidor som ska ritas kan vi använda formeln ovanför för att räkna ut vinkeln på varje hörn:

vinkel = 180*(2/n)

Vad är kvar nu? En version av programmet I förra delen men med variabeln vinkel istället för 90: 

for i in range(0, N): 
    turtle.forward(100) 
    turtle.left(vinkel)

Såhär blir hela programmet

Här saknar vi dock kommentarer. Var och hur skulle du lägga till dem?

Har du en fråga du vill ställa om Loopande sköldpaddor? Ställ den på Pluggakuten.se
Har du hittat ett fel, eller har du kommentarer till materialet på den här sidan? Mejla matteboken@mattecentrum.se
Läs sidan på andra språk

I den här videon lär vi oss använda en for-loop för att rita häftigare mönster med hjälp av sköldpadda/turtle.

  • Formel: Är ett matematisk uttryck som beskriver en specifik lag eller regel.
  • If-sats: Nyckelordet “if” följt av ett logiskt påstående används för att låta våra program fatta beslut.
Svårighetsgrad