While-løkker i Python

Med ei while-løkke gjentar vi operasjonen helt til vi når et bestemt mål. Noen ganger kan vi sette opp dette målet selv, og andre ganger bruker man while-løkker når man ikke vet hvor lenge en løkke skal kjøre. Man kan tenke på ei while-løkke om en rekke gjentatte if-tester. 

Ei while-løkke består av ordet while etterfulgt av et logisk utsagn, altså noe som enten er True eller False. På neste linje står det som skal gjøres helt til det logiske utsagnet blir usant. Dette kan vises slik:

while [et logisk utsagn er sant]: 

    [gjør operasjon]

Tidligere har vi simulert gjentatte terningkast med for-løkker, hvis vi f.eks. har ønsket å kaste fem terninger. Et eksempel på når ei while-løkke hadde passet bedre, er dersom vi vil kaste en terning helt til vi får en sekser. Da vet vi ikke hvor mange ganger noe må gjentas, men vi vet når vi er ferdig.

Største felles faktor til to tall

Faktorene til et tall er hvilke heltall vi kan multiplisere for å få dette tallet. Faktorene til tallet 15 er 1, 3, 5, 15, siden 1 ⋅ 15 = 15 og 3 ⋅ 5 = 15. Til større tall kan det etter hvert bli mange faktorer.

Nå skal vi lage et program som finner største felles faktor til to tall som brukeren oppgir. Vi starter med å se på en grafisk løsning, deretter skal vi programmere det. 

Algoritme (beskrivelse)

Vi skal nå gjennomføre følgende steg:

Når det nye punktet ligger på aksen y = x har du funnet største felles faktor. I eksempelet til høyre ser vi at største felles faktor til 18 og 24 er 6. 

Nå skal vi prøve å gjøre dette i Python.

Algoritme (grafisk)

Det er to spørsmål vi må svare på før vi kan begynne å programmere: 

Løsningsforslag (kun algoritmen)

Løsningsforslag (mer "robust" program som takler alle tall)

While-løkke som kjører et bestemt antall ganger

Selv om det er vanlig å bruke for-løkker når vi vet hvor mange ganger noe skal gjentas, kan vi også bruke while-løkker. Vi må bare passe på at betingelsen i while-løkka (det som står etter while) oppdateres passe mange ganger. 

Her er et eksempel der vi skriver ut fire tall (0, 1, 2, 3) med ei while-løkke:

Rekkefølgen på operasjonene i while-løkka er avgjørende for hva du får som output. Koden under er den samme som over, bortsett fra at linje 4 og 5 har byttet plass. Tenk gjennom hvordan du tror outputen vil være annerledes før du kjører den:

Oppgave: Kvadrattall med while-løkke

Bytt ut spørsmålstegnene ??? i koden under for å lage et program som bruker ei while-løkke til å skrive ut de fire første kvadrattallene, altså: 

16

Løsningsforslag

Tilfeldige tall i while-løkker

Oppgave: Tallgjetting

Nå skal vi lage et program som trekker et tilfeldig tall, og ved hjelp av input()-funksjonen lar oss gjette hva tallet er. Programmet skal la brukeren gjette om og om igjen helt til man finner det riktige tallet. Du kan bruke flytskjemaet under kodeboksen for å bygge opp programmet.

Flytskjema som kan være til hjelp

Løsningsforslag

UTFORDRING: 

Du finner et flytskjema som kan være til hjelp hvis du trykker på denne boksen.

Løsningsforslag utfordring

Tall som vokser

Vi kan også bruke while-løkker til å utforske tall som vokser til en grense. 

Under er et eksempel på Python som prøver å regne ut summen av 1/2 + 1/4 + 1/8 + 1/16 + ...

altså summen av elementene i rekka 1/2n der n går fra 1 til uendelig. Som gif-en til venstre under skal illustrere vil dette nærme seg, men aldri bli, 1.

Python vil derimot runde av etter hvert som det blir mange desimaler, og vi ser at vi "får 1" etter 55 runder:

Oppgave: Vekstfaktor

Du skal lage et program som regner ut prosentvis økning i flere perioder. Programmet skal ta inn et beløp, renteprosent og ønsket sluttbeløp som input-verdier, og bruke ei while-løkke til å regner ut hvor mange år det vil gå før vi når dette beløpet

Du kan bruke flytskjemaet under kodeboksen for å bygge opp programmet.

Flytskjema som kan være til hjelp

Løsningsforslag

Oppgave: Fibonaccitall

Fibonaccitallene er den berømte tallrekka

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

der de to første tallene er 0 og 1, og hvert påfølgende tall er summen av de to foregående. Tallrekka dukker overraskende ofte opp i både matematikk og biologi.

Du finner "skjelettkode" (halvferdig kode der utvalgte deler er fjernet) under kodeboksen.

Oppgave 1: Skjelettkode

Oppgave 2: Skjelettkode

Oppgave 1: Løsningsforslag

Oppgave 2: Løsningsforslag