Lykkjer med kodeordet while
På sida "Vegval – if-elif-else" startar vi med eit program der brukaren av programmet skal skrive "n" dersom hen er norsk, og "s" dersom hen er svensk. Deretter skriv programmet til skjermen anten "Du er norsk." eller "Du er svensk.". Algoritmen til programmet (utan at variabelnamn er tekne med) er slik:
- Skriv til skjermen: "Dersom du er norsk, skriv 'n'. Dersom du er svensk, skriv 's'.".
- Ta imot svaret til brukaren.
- Dersom svaret er "n", skriv til skjermen "Du er norsk.". Dersom svaret ikkje er "n" men "s", skal det skrivast "Du er svensk." til skjermen.
Vi ser no på ein variant av dette programmet der brukaren skriv
- "j" dersom hen har søsken
- "n" dersom hen ikkje har søsken
Oppgåve – algoritme
Skriv om på algoritmen ovanfor slik at han passar til den nye varianten av programmet.
Problemet med denne algoritmen er at dersom brukaren av ein eller annan grunn skriv feil, vil programmet avslutte utan at brukaren får ein ny sjanse til å skrive rett. Det ønskjer vi å gjere noko med. Programmet skal fungere slik at dersom det blir skrive noko anna enn "j" eller "n", skal programmet gi melding om det og gå attende til starten.
Oppgåve – algoritme
Endre på algoritmen ovanfor slik at han passar med dei nye krava til programmet.
Korleis får vi programmet til å repetere utvalde kodelinjer heilt til brukaren har skrive "j" eller "n"? I Python løyser vi det ved å lage ei såkalla lykkje med kommandoordet while
. Ei while-lykkje (eller ein while-struktur) fungerer delvis på den same måten som ein if-struktur ved at det er eit vilkår som fastset om kode skal køyrast eller ikkje. Skilnaden er at med ei while-lykkje vil programmet køyre koden på nytt og på nytt heilt til vilkåret ikkje er oppfylt lenger.
Programmet nedanfor fungerer etter algoritmen ovanfor. Køyr programmet ved å trykkje på avspelingsknappen , og test det ved å skrive noko feil, altså noko anna enn "j" eller "n". (NB: Det kan ta litt tid frå du trykkjer på avspelingsknappen til programmet blir køyrt.)
Oppgåve – koding
Kva trur du svar != "j"
i vilkåret på linje 2 betyr?
Oppgåve – koding
Kvifor startar programmet med å opprette variabelen svar
og gi han verdien "noko anna"?
Oppgåve – koding
Prøv å ta vekk den første linja (svar = "noko anna"
), og køyr programmet. Kvifor kjem det ei feilmelding, og kva betyr feilmeldinga du får?
Oppgåve - koding
Legg inn svar = "j"
på linje 1 (i staden for svar = "noko anna"
), og køyr programmet. Kva skjer, og kvifor skjer det?
Oppgåve – algoritme
Algoritmen ovanfor programvindauget passar ikkje heilt med programmet. Skriv om algoritmen slik at han stemmer med programmet.
I testen på while-lykkja (linje 2) må vi teste om variabelen svar
verken har verdien "j" eller verdien "n". I motsett fall veit vi at brukaren har skrive eit rett svar, og programmet kan avslutte. Då skal ikkje while-lykkja køyre meir.
Legg merke til at alt som høyrer til i while-lykkja er rykt inn mot høgre på same måten som vi gjer med det som høyrer innunder if
, elif
og else
i ein if-elif-else-struktur. Dersom vi legg til ei ny programlinje med kode lengst nede og rykkjer den heilt attende til venstremargen, vil koden ikkje vere ein del av while-lykkja.