Løkker med kodeordet while
På siden "Veivalg – if-elif-else" starter vi med et program der brukeren av programmet skal skrive "n" dersom hen er norsk, og "s" dersom hen er svensk. Deretter skriver programmet til skjermen enten "Du er norsk." eller "Du er svensk.". Algoritmen til programmet (uten at variabelnavn er tatt med) er slik:
- Skriv til skjermen: "Dersom du er norsk, skriv 'n'. Dersom du er svensk, skriv 's'.".
- Ta imot svaret til brukeren.
- Dersom svaret er "n", skriv til skjermen "Du er norsk.". Dersom svaret ikke er "n" men "s", skal det skrives "Du er svensk." til skjermen.
Vi ser nå på en variant av dette programmet der brukeren skriver
- "j" dersom hen har søsken
- "n" dersom hen ikke har søsken
Oppgave – algoritme
Skriv om på algoritmen ovenfor slik at den passer til den nye varianten av programmet.
Problemet med denne algoritmen er at dersom brukeren av en eller annen grunn skriver feil, vil programmet avslutte uten at brukeren får en ny sjanse til å skrive rett. Det ønsker vi å gjøre noe med. Programmet skal fungere slik at dersom det blir skrevet noe annet enn "j" eller "n", skal programmet gi melding om det og gå tilbake til starten.
Oppgave – algoritme
Endre på algoritmen ovenfor slik at den passer med de nye kravene til programmet.
Hvordan får vi programmet til å repetere utvalgte kodelinjer helt til brukeren har skrevet "j" eller "n"? I Python løser vi det ved å lage en såkalt løkke med kommandoordet while
. En while-løkke (eller en while-struktur) fungerer delvis på den samme måten som en if-struktur ved at det er et vilkår som fastsetter om kode skal kjøres eller ikke. Forskjellen er at med en while-løkke vil programmet kjøre koden på nytt og på nytt helt til vilkåret ikke er oppfylt lenger.
Programmet nedenfor fungerer etter algoritmen ovenfor. Kjør programmet ved å trykke på avspillingsknappen , og test det ved å skrive noe feil, altså noe annet enn "j" eller "n". (NB: Det kan ta litt tid fra du trykker på avspillingsknappen til programmet blir kjørt.)
Oppgave – koding
Hva tror du svar != "j"
i vilkåret på linje 2 betyr?
Oppgave – koding
Hvorfor starter programmet med å opprette variabelen svar
og gi den verdien "noe annet"?
Oppgave – koding
Prøv å ta vekk den første linja (svar = "noe annet"
), og kjør programmet. Hvorfor kommer det en feilmelding, og hva betyr feilmeldingen du får?
Oppgave - koding
Legg inn svar = "j"
på linje 1 (i stedet for svar = "noe annet"
), og kjør programmet. Hva skjer, og hvorfor skjer det?
Oppgave – algoritme
Algoritmen ovenfor programvinduet passer ikke helt med programmet. Skriv om algoritmen slik at den stemmer med programmet.
I testen på while-løkken (linje 2) må vi teste om variabelen svar
verken har verdien "j" eller verdien "n". I motsatt fall vet vi at brukeren har skrevet et rett svar, og programmet kan avslutte. Da skal ikke while-løkken kjøre mer.
Legg merke til at alt som hører til i while-løkken er rykket inn mot høyre på den samme måten som vi gjør med det som hører innunder if
, elif
og else
i en if-elif-else-struktur. Dersom vi legger til en ny programlinje med kode nederst og rykker den helt tilbake til venstremargen, vil koden ikke være en del av while-løkken.