Gjøre noe for mange#
Læringsmål#
Nå skal vi introdusere for
løkker.
Introduksjon#
For-løkker hjelper oss å gjøre samme ting for flere tilfeller eller flere ganger. På norsk kunne vi si for flere ting gjør handling, for eksempel for alle barna gi dem en oppmuntring. På nesten-pythonsk kunne vi si
for hvertbarn in barna: oppmuntre(hvertbarn)
Her er barna
en variabel som er en rekke med barn. hvertbarn
er en variabel. Det som står med innrykk blir gjort en gang for hvert av barna.
Representasjoner#
Ord#
På norsk sier vi noen ganger
For hver elev må du gi dem en bok.
Hver dag må du spise frokost.
Alle studenter fortjener et kompliment hver dag! Dette likner på for-løkker. I alle tilfeller har vi en samling objekt (elever, dager, studenter) og gjør noe for hver av objektene.
Ordet løkke
kommer vel av at for-løkka på en måte går rundt og rundt, en gang for hvert objekt i samlingen.
W3Schools codegame#

Fig. 2.33 w3schools codegame#
Gå til w3schools codegame og spill nivå 22‒27.
Python#
Se på følgende eksempel
noentall = [1,2,3,5,8,13]
print("noentall er en variabel med verdi " + str(noentall) + " som har typen " + str(type(noentall)))
for tallet in noentall:
print("Tallet er " + str(tallet));
print("og har typen " + str(type(tallet)))
noentall er en variabel med verdi [1, 2, 3, 5, 8, 13] som har typen <class 'list'>
Tallet er 1
og har typen <class 'int'>
Tallet er 2
og har typen <class 'int'>
Tallet er 3
og har typen <class 'int'>
Tallet er 5
og har typen <class 'int'>
Tallet er 8
og har typen <class 'int'>
Tallet er 13
og har typen <class 'int'>
Vi definerer først en variabel noentall
som har har en liste av tall som verdi. For sikkerhets skyld skriver vi ut denne.
Så skriver vi en for-løkke. I en forløkke er det noe som skal gjøres flere ganger. Dette “noe” er det som er rykket inn. I Python er inntrykk viktig.
Dette skal gjøres én gang for hvert element i noentall
. For hver runde i løkka får variabelen tallet
en verdi fra noentall
.
Øvelse: Legg til en linje i programmet over sånn at det også skriver ut det dobbelte av hvert tall.
Det er ofte kjedelig å manuelt skrive inn en liste over mange tall. Til det har vi en ferdig funksjon: range()
. For eksempel gir range(10)
oss en liste over de ti første heltallene.
førsteti = range(10)
print("førsteti er en variabel med verdi " + str(førsteti) + " som har typen " + str(type(førsteti)))
for tallet in førsteti:
print("Tallet er " + str(tallet));
førsteti er en variabel med verdi range(0, 10) som har typen <class 'range'>
Tallet er 0
Tallet er 1
Tallet er 2
Tallet er 3
Tallet er 4
Tallet er 5
Tallet er 6
Tallet er 7
Tallet er 8
Tallet er 9
Øvelse: Skriv et tall som skriver ut de fjorten første partallene (de første partallene er altså det dobbelte av de første heltallene).
Turtle#
Forløkker kan gjerne brukes i Turtle også. Turtle er godt egnet til øvelser:
Skriv et program som ti ganger gjør følgende: Går 10 framover og vender seg ti grader mot venstre
Skriv et program som ti ganger gjør følgende: Går 10 framover og vender seg hundre og ti grader mot venstre
Lag en åttekantet stjerne.
Gå til Trinket.com og gjør oppgavene undre Python→For loops.
Søk på Google etter bilder av turtle for loop
.
GeoGebraScript#
Sammenheng med algebra#
Dette er orienteringsstoff for interesserte:
For-løkker kan sammenliknes med operatoren “for alle” \(\forall\). Det er likevel ofte sånn at forløkker i programmering handler om å gjøre noe, mens \(\forall\) vanligvis handler om noe som er sant eller ikke. Sånn sett kan \(\forall\) heller sammenliknes med Python-funksjonen map()
.
Andre programmeringsspråk#
Dette er orienteringsstoff for interesserte:
I mange andre programmeringsspråk er innrykk mindre viktig: Her er et eksempel fra programmeringsspråket R
(fra w3schools)
frukter <- list("apple", "banana", "cherry")
for (frukt in frukter) {
print(frukt)
}
I noen språk (f.eks. Java
) heter tilsvarende konstruksjon foreach
.
I en del andre språk (f.eks. C
) finnes en gammeldags for-variant som på en måte likner på vår, men som på en annen måte er veldig forskjellig. Denne er mer tilpasset hvordan datamaskinen fungerer enn hvordan mennesker tenker; derfor er den lett å oversette til datamaskinens strømledninger, men dårlig til å modellere. Den bør altså ikke brukes. Her er likevel et eksempel fra programmeringsspråket C
.
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", i);
}
Datatyper#
Lister og sekvenser#
Vi har så langt sett på datatypene int
, bool
og str
. Disse har én verdi. Typen List
kan ha en rekke av verdier:
listami = ["eple", "pære", "banan"]
print(listami)
['eple', 'pære', 'banan']
Vi kan finne enkeltelementer i lista:
print(listami[0])
print(listami[2])
eple
banan
Vi kan gjøre ting for alle elementene i lista:
for l in listami:
print("l er nå " + l)
l er nå eple
l er nå pære
l er nå banan
For mer informasjon se w3schools.
Mønstre#
Funksjonen range()
#
Noen ganger har vi behov for å lage en tallrekke. Det kan vi lage med funksjonen range
:
for x in range(4):
print("x er nå " + str(x))
x er nå 0
x er nå 1
x er nå 2
x er nå 3
For mer forklaring og eksempler, se w3schools. Man kan også skrive ut en tallrekke som begynner med noe annet enn 0, eller en tallrekke som hopper i anre trinn enn 1.
Sammenlikn også med følgende kode, hvor vi skriver inn verdiene selv (uten å bruke range
):
for y in [0,1,2,3]:
print("y er nå " + str(y))
y er nå 0
y er nå 1
y er nå 2
y er nå 3
Lag et program som skriver ut de 10 første heltallene.
For i for#
Noen ganger har vi forløkker inne i hverandre. Se på følgende program:
for i in range(2):
print("NY YTRE LØKKE i har verdien " + str(i))
for j in range(3):
print(" Ny indre løkke j har verdien " + str(j))
print(" i + j = " + str(i+j))
NY YTRE LØKKE i har verdien 0
Ny indre løkke j har verdien 0
i + j = 0
Ny indre løkke j har verdien 1
i + j = 1
Ny indre løkke j har verdien 2
i + j = 2
NY YTRE LØKKE i har verdien 1
Ny indre løkke j har verdien 0
i + j = 1
Ny indre løkke j har verdien 1
i + j = 2
Ny indre løkke j har verdien 2
i + j = 3
Kopier gjerne programmet til din egen fil, så du kan forandre det og eksperimentere det.
Legg merke til at vi har godt med print-setninger: Det hjelper oss å forstå hva som skjer. Noen ganger føler man at man har for i kål
, fordi man har mistet oppskriften, og da er det ofte lurt å legge inn flere såkalte testutskrifter. Man kan ta dem bort (eller kommentere dem bort) senere.
Skjønner du hva som skjer? For hvert element i den ytre løkka går alle verdiene i den indre løkka. Resultatet blir på en måte en løkke i en løkke TODO: Tegne grafisk eller noe todimensjonalt TODO: Tegne grafisk.
print
-instruksjon skal skrive ut på en ny linje, kan du prøve print("noe", end="")
som ikke skriver ut en ny linje etter seg.Løkke som vedlikeholder verdier#
Flyttet til dokumentet om While.
Når bruker vi forløkker?#
Ofte. Forløkker brukes når vi skal modellere en ting som skjer mange ganger, for mange hendelser, for mange objekt e.l.