Slumpvandring

I denna uppgift får du träna på if-satser och block-struktur i program.

Koden i denna uppgift är provkörd på http://replit.com/languages/python-turtle (Python 2.7).

1. Alternativa färger

I följande program ritas antingen ett rött eller grönt streck, beroende på värdet på r.

import turtle
t = turtle.Turtle()

r = 1               # r får värdet 1
if r==1:            # testa om r har värdet 1
  t.color("red")    #  i så fall, sätt färgen till röd
else:               # i annat fall
  t.color("green")  #  sätt färgen till grön
t.forward(50)       # gå sedan framåt

Uppdrag: Prova programmet. Vilken färg ritas? Prova att ändra r = 1 till r = 2. Vilken färg ritas nu? Hur fungerar if-satsen?

(Om du har svårt att se skillnad på färgerna, ändra dem till andra färger.)

2. Slumpfärger

I stället för att sätta värdet på r till 1 eller 2 kan du använda ett slumptal:

from random import randint
r = randint(1,2)

Uttrycket randint(1,2) ger värdet 1 eller 2 med samma sannolikhet (50%).

Uppdrag: Ändra programmet så att värdet på r sätts genom att dra ett slumptal. Kör programmet några gånger. Får du fram olika färger?

Lösning
import turtle
t = turtle.Turtle()

from random import randint
r = randint(1,2)

if r==1:
  t.color("red")
else:
  t.color("green")
t.forward(50)

3. Slumpsväng

Nu vill vi att paddan skall svänga till vänster när färgen sätts till röd, och till höger när färgen sätts till grön.

Uppdrag: Lägg till kod inuti if-satsen så att paddan svänger till vänster respektive höger förutom att sätta färgen. Kör programmet några gånger. Får du paddan att göra rätt?

(Du kan själv bestämma hur många grader paddan skall svänga.)

Lösning
import turtle
t = turtle.Turtle()

from random import randint
r = randint(1,2)

if r==1:
  t.color("red")
  t.left(45)
else:
  t.color("green")
  t.right(45)
t.forward(50)

4. Slumpvandring

Nu skall vi utöka programmet med en funktion randomwalk som tar ett antal steg och slumpmässigt svänger vänster med röd färg eller höger med grön färg.

I funktionen definierar vi ett antal parametrar så vi enkelt kan välja hur många steg paddan skall ta (steps), hur många grader den skall svänga (angle) och hur långa stegen skall vara (steplength). Vi provar att anropa den med 30 steg, vinkel 100, och steglängd 20:

import turtle
t = turtle.Turtle()
t.speed(10)

from random import randint

def randomwalk(steps, angle, steplength):
  for c in range(steps):
    r = randint(1,2)
    # lägg till en if-sats här för att svänga och byta färg
    # beroende på värdet på r
    t.forward(steplength)

randomwalk(30,100,20)

Men funktionen är inte riktigt klar än.

Uppdrag: Lägg till en if-sats så att funktionen för varje steg svänger slumpmässigt till vänster med röd färg eller till höger med grön färg. Prova programmet med olika parametrar.

Tips! När du nästlar funktionsdefinitioner (def), loopar (for) och if-satser (if) inuti varandra får du en block-struktur där de inre delarna av varje konstruktion skall vara indragna ett antal blanksteg, som i följande exempel:

a = 1     # Kommando på yttersta nivån

def p():  # funktionen p är definierad på yttersta nivån
  b = 2               # Kommando inuti p-definitionen
  for i in range(5):  # For-loop inuti p-definitionen
    c = 3             #   Kommando inuti for-loopen
    d = 4             #   Kommando inuti for-loopen
    if c==d:          #   if-sats inuti for-loopen
      e = 5           #     Kommando inuti if-satsens "then"-gren
      f = 6           #     Kommando inuti if-satsens "then"-gren
    else:             #   "else" skall ha samma indragning som "if"
      g = 7           #     Kommando inuti if-satsens "else"-gren
    h = 8             #   Kommando inuti for-loopen
  j = 9               # Kommando inuti p-definitionen
  k = 10              # Kommando inuti p-definitionen

p()       # Kommando på yttersta nivån (anrop av p)

Observera att if och else skall vara indragna lika mycket för att Python skall förstå att de hänger ihop. Delen direkt efter if kallas “then”-grenen. Delen direkt efter else kallas “else-grenen”.

Lösning

Programmet bör se ut så här:

import turtle
t = turtle.Turtle()
t.speed(10)

from random import randint

def randomwalk(steps, angle, steplength):
 for i in range(steps):
   r = randint(1,2)
   if r == 1:
     t.color("red")
     t.left(angle)
   else:
     t.color("green")
     t.right(angle)
   t.forward(steplength)

randomwalk(30,100,20)