Programmeringskurs: 3.1 Hva er løkker?
Telle til 5
Det er ikke alltid så lett å avgjøre om det er en for eller en while-løkke som passer best. Og faktisk er det slik at vi alltid kan bruke både en for og en while-løkke. La oss se på et eksempel.
Merk at vi skal se detaljert både på while og for-løkker i de kommende delkapitlene. Her vil vi fokusere på forskjellen mellom de to typene løkker.
Vi ønsker å lage et program som teller opp fra 1 til 5.
a) Lag programmet ved å bruke en for-løkke.
b) Lag programmet ved å bruke en while-løkke.
LØSNING:
a) Vi bruker en for-løkke til å skrive ut hvert av elementene i en liste med tallene fra 1 til 5. Det gjør vi slik:
for tall in [1, 2, 3, 4, 5]:
#\quad#print(tall)
Koden blir da slik. Trykk på for å kjøre koden.
b) For å lage programmet med en while-løkke trenger vi ingen liste. Vi definerer i stedet en variabel, og bruker denne til å telle oppover til 5. Koden blir slik:
Vi ser at begge kodene ovenfor gir samme resultat. Men virkemåten er ulik.
#\texttt{for}#-løkken går gjennom listen med tallene fra 1 til 5 slik:
- Den starter med det første elementet, og utfører handlingen.
I eksemplet ovenfor er handlingen "å skrive ut tallet". - Så hopper til neste element i listen.
- Slik fortsetter den til det ikke er flere elementer i listen
For løkker krever med andre ord at vi har en liste eller et annet strukturert objekt å gå gjennom, eller at vi på en annen måte forteller på forhånd hvor mange ganger handlingen skal repeteres.
#\texttt{while}#-løkken fungerer ved at den gjentar handlingen "å skrive ut verdien" til tallet så lenge betingelsen tall <= 5 er sann. Datamaskinen vet med andre ord ikke hvor mange ganger den skal gjenta handlingen skal repeteres. Stegvis blir det slik.
- Den sjekker om betingelsen (Er tall mindre enn eller lik 5?) er sann
- Hvis betingelsen er sann (#\texttt{True}#) utfører den handlingen og går deretter tilbake til det øverste kulepunktet.
I eksempelet ovenfor er handlingen "å skrive ut tallet" og deretter øke tallet med 1 - Hvis betingelsen er usann (#\texttt{False}#) stopper løkken
- Hvis betingelsen er sann (#\texttt{True}#) utfører den handlingen og går deretter tilbake til det øverste kulepunktet.
Vi kan visualisere forskjellen til de to løkkene slik:
For-løkke
while-løkke
(!) While-løkker innebærer en risiko å gjenta en handling i det uendelige. Vi må derfor alltid sørge for at det er noe som sørger for at betingelsen etter hvert blir usann. Hvis betingelsen alltid er sann vil datamaskinen (eller programmet vi kjører koden i) etter hvert bryte sammen.
Tenk bare på hva som skjer dersom vi i steden for tall <= 5 skriver 1 <= 5, slik at koden blir: