Python for lærere – Egentrening

Fire konsepter

3 Løkker

3.2 While-løkker

While-løkker kommer til å kjøre helt til et et vilkår møtes. Dersom vi ikke vet hvor mange ganger løkka må kjøres, kan det være praktisk å benytte et vilkår. La oss se på et eksempel:

Vi lager en kode som “gjetter” på et tall mellom 1 og 100, også teller vi hvor mange ganger koden må gjette for å treffe riktig!

				from random import randint
tall = 42
ant_gjett = 0

gjett = 0
while gjett != tall:
    gjett = randint(1, 100)
    ant_gjett = ant_gjett + 1
print(ant_gjett)
			

Skriv inn denne koden i Code, og kjør den. Her er det flere ting å legge merke til:

  • ulik skrives “!=” i python
  • alltid kolon på slutten av en while-linje
  • all kode som skal gjentas må rykkes inn for at python skal forstå hva som er “i løkka”
  • linje 9 er ikke en del av løkka, fordi den ikke er rykket inn
  • En python-editor (Code) vil lage automatisk innrykk etter en korrekt while-linje
  • vi må lage variabelen gjett FØR vi benytter den i vilkåret på linje 6

Etter ‘while’ kan man skrive mange forskjellige vilkår, og vi kommer til å snakke om disse i det neste temaet.

La oss nå heller se på hvordan vi kan løse et problem med while-løkker. Samme oppgave som i stad, konto med kr 12 000,- og månedlig sparing på 750,- Hvor lang tid tar det før man kommer til kr 30 000,-?

				konto = 12000
sparing = 750
mnd = 0

while konto < 30000:
    konto = konto + sparing
    mnd = mnd + 1
    print(mnd, konto)
			

Her er vilkåret for løkka “konto < 30000”, som betyr at løkka kjøres så lenge konto er mindre en 30000. Hva skjer med output dersom linje 8 skrives uten innrykk? Gjett og test!

Vi bør nevne at while-løkker fort kan bli “uendelige”. Hva skjer dersom man i koden skriver en løkke som varer evig? Vel, i gamle dager måtte vi starte datamaskinen på nytt, og kanskje trekke ut kontakten for å få stoppet den. Slik er det ikke lenger. I DigitAbel Code holder det med å laste siden på nytt, og en del python-editorer har en “Stopp”-knapp man kan trykke på. Eksempel på en slik kode kan være det siste eksemplet vårt, men vi tar bort linje 6. Hva skjer? Vel, konto kommer aldri til å bli større, og vil alltid være mindre enn 30000.

Siden vi allerede har begynt å tenke vilkår, så kan vi vel stupe inn i det?

Forrige – 3.1 For-løkker

Neste – 4.1 Vilkår (If-else)

DigitAbel – for dypere læring