Datahjelperne

Programmering: Ta imot informasjon fra brukeren

Har du noen gang lurt på hvordan det å programmere fungerer? Hva er det egentlig man gjør når man programmerer? Hvorfor programmerer man? Er det veldig vanskelig å forstå hvordan det fungerer? I denne serien av artikler vil jeg prøve å forklare det på en måte sånn at til og med du som ikke kan noen ting om data forstår det.

Har du lest Programmering: Helt grunnleggende kunnskap og Programmering: Bruk av variabler ? Det anbefaler jeg deg å gjøre før du leser denne artikkelen. Neste artikkel er Programmering: Dine egne funksjoner

I forrige artikkel viste jeg dere hvordan man sammenligner to verdier fra variabler, og hvordan Python tolker plassering av koden din. I dag skal vi lære hvordan man kan ta i mot input fra brukeren. Det betyr at når programmet starter, så vil programmet be brukeren om å ta et valg, eller skrive inn noe, som så blir lagt inn i en variabel og avgjør hvordan programmet skal oppføre seg videre.

Hvis du har lest de to forrige artiklene mine, så vet du hvorfor jeg har skrevet import random øverst: For å importere biblioteket random, som gir meg tilgang til å bruke funksjonen random.

Etter det har jeg laget en variabel som heter tall, og bestemt at verdien skal være resultatet av funksjonen random. Jeg har også bedt random om å velge et tall mellom 1 og 6. Etter denne linjen har jeg brukt print-funksjonen til å skrive “Velkommen til programmet mitt!”.

Så kommer vi til variabelen som heter gjett. Du husker kanskje at input er en funksjon som hindrer programmet fra å fortsette før brukeren har tastet noe. Ettersom input returnerer en string med innholdet som brukeren skrev inn, så må vi huske å konververte stringen til en integer hvis vi ønsker å sammenligne det tilfeldige tallet (som er en integer) med input (som er en string) fra brukeren. Derfor har jeg tatt med int og lagt inn input inne i int sine parenteser, og deretter inne i input sine parenteser har jeg skrevet beskjeden som brukeren skal få opp i forbindelse med denne funksjonen. Det er lett å glemme at man må både åpne og lukke funksjoner.

Denne linjen vil produsere en feilmelding, ser du hvorfor? Det er fordi jeg ikke har lukket int-funksjonen. Det skulle ha vært to parenteser på slutten, ikke bare en:

For å gjøre det enda mer synlig for dere:

OK, la oss gå videre til å sammenligne verdiene til disse to variablene

La oss kjøre koden og se.

Jeg blir bedt om å gjette et tall. Nå innser jeg at jeg burde ha fortalt brukeren at det er et tall mellom 1 – 6, så jeg oppdaterer koden og legger det inn.

Da prøver vi dette en gang til. Denne gangen har jeg også tatt med en kolon : på slutten.

Jeg velger å gjette 3 den første gangen. Og det viser seg å være riktig tall. Sånn flaks!

Jeg prøver en gang til, jeg vil gjette feil.

Nå går vi videre. Hva skjer hvis jeg, som er brukeren, skriver inn et tall som ikke er mellom 1 – 6?

Ingenting spesielt skjer, den forteller meg bare at jeg har gjettet feil. Selvfølgelig, fordi jeg har jo bedt random-funksjonen om å kun velge et tall mellom 1 og 6, så om jeg legger inn tallet 9, vil jeg aldri gjette riktig. La oss sørge for å hindre brukeren fra å gjøre feil her. Dette blir litt mer komplisert nå, så hold deg godt fast.

Som jeg tidligere har forklart, så vil programmet avslutte seg selv med en gang det er ferdig. Det betyr at man får bare en sjanse til å gjøre det riktig, så må man starte programmet på nytt. Kjedelig! Vi vil jo at programmet skal gi oss flere sjanser til å gjøre det riktig før programmet er ferdig.

Derfor skal vi nå bruke en while-løkke. En while løkke er selvbeskrivende, oversatt til norsk er det mens, som i i mens. Vi forteller while hvilke betingelser som skal oppfylles, og da vil while-løkken gjøre det som står i koden mens betingelsen er oppfylt. Det ligner på hvordan vi bruker if-funksjonen, vi legger inn to variabler, og det er betingelsen som må oppfylles hvis resten av koden under if skal kjøre.

Som du ser, jeg har laget to nye variabler, den ene heter sjanser, og den andre heter runde. Jeg gir brukeren 10 sjanser til å gjette riktig tall. Første runde er runde nummer 0. Vi skal oppdatere variabelen runde for hver runde og legge på et ekstra tall. Ser du hvordan jeg gjør det? Som du ser inne i while-løkken, rett under print(“Velkommen til programmet mitt!”) så ligger det runde += 1.

Som dere tidligere har lært, så setter man variabler ved å bruke et erlikhetstegn mellom variabel og verdi. Python tolker et plusstegn etterfulgt av et etterlikhetstegn += som at det skal plusse på det som står som verdi. Altså, for hver gang while-løkken kjører koden vil runde få plusset på 1.

Jeg har gitt brukeren 10 sjanser til å gjøre det riktig. Når runde også passerer tallet 10, så utløser jeg ikke lenger betingelsen som ligger inne i while-løkken. Betingelsen er at variabelen runde er mindre enn variabelen sjanser. Jeg bruker tegnet < for å indikere at variabelen skal være mindre enn. Man kan bruke tegnet > for å indikere at variabelen skal være større enn.

Jeg har også lært dere forskjellen mellom integer og streng. Som dere ser, har jeg denne gangen laget variabelen runde uten å bruke int-funksjonen.

Det er for å illustrere for dere at det er forskjell på om man bruker anførselstegn ” “ rundt verdien eller ikke. Når man bruker anførselstegn ” “, så angir man at innholdet er en streng. Hvis man lar være å bruke anførselstegn ” “, og legger inn et tall som verdi, vil runde automatisk bli oppfattet som en integer. Derfor kan jeg egentlig like greit gjøre det sånn:

Da vil både sjanser og runde være integere. La oss nå kjøre koden og se hva som skjer. Dette er koden som skal kjøres:

Som vi ser, så avslører den jo for oss hva tallet er når vi gjetter feil. Etter å ha gjettet 10 ganger, blir jeg bedt om å trykke en tast for å avslutte programmet. Ser dere også at tallet alltid er 2, og ikke forskjellig for hver gang? Det er en logisk forklaring på dette.

Jeg har definert tall før while-løkken. Siden det bare er while-løkken som gjentar seg, og ikke hele koden, er derfor variabelen tall alltid den samme gjennom hele programmets kjøretid.

Hvis vi vil at tallet skal være forskjellig hver gang, må vi flytte tall-variabelen inn i while-løkken:

La oss også flytte en annen ting:

Vi trenger ikke at dette gjentar seg igjen og igjen, det trenger bare å skrives ut den første gangen.

La oss kjøre koden og se hva som skjer.

Som vi kan se, så er tallet forskjellig for hver gang vi gjetter. Flott!

La oss nå gjøre dette litt mer komplisert. Vi skulle jo passe på så brukeren ikke skriver et tall som ikke er mellom 1 og 6. Dette løser vi inne i while-løkken. Vi omstrukturerer også koden litt.

Som vi kan se, har jeg flyttet en del ting rundt og lagt til noe nytt. Som vi ser, mens while-løkkens betingelse er oppfylt, så vil den spørre brukeren om input, og deretter en if-løkke med to betingelser som må oppfylles samtidig. De to betingelsene er angitt inne i parentes. Den ene betingelsen er at variabelen gjett skal være mer enn 1, og den andre betingelsen er at variabelen gjett skal være mindre enn 6.

Lengre nede ser vi at jeg har en else: print(“Tallet må være mellom 1 og 6!”). Husk at plassering av blokkene er viktig for at python skal forstå hva som er relatert til hva.

Ser du også at jeg har plassert runde += 1 innenfor if-løkken som sjekker om input var mellom 1 og 6? Det er fordi vi vil gi brukeren 10 sjanser til å gjette riktig tall, og hvis brukeren skulle legge inn et tall som ikke er mellom 1 og 6, så skal det ikke ødelegge for brukerens 10 sjanser til å legge inn et tall mellom 1 og 6.

Det betyr at hvis brukeren legger inn for eksempel tallet 9 hver eneste gang, så vil runde aldri øke, og while-løkken fortsetter i det uendelige, helt til brukeren gjør det riktig og legger inn et tall mellom 1 og 6.

Ser du også at når jeg la inn tallet 1, så ba den meg om å skrive inn et tall mellom 1 og 6? Jeg gjorde jo det, jeg la faktisk inn tallet 1, og det burde ha vært gyldig.

Det er en logisk forklaring på det. Les dette høyt:

Hvis gjett er mer enn 1 og mindre enn 6. Det betyr at tallet må være mer enn 1, og mindre enn 6, altså vil vi i praksis kun ha mulighet til å bruke tallene 2 – 5. Dette kan vi løse på to ulike måter.

Vi kan sette det til å være mer enn 0 og mindre enn 7.

Eller vi kan endre betingelsen litt. Hvis man skriver et enkelt >, vil det altså bety mer enn, men hvis man tar med et erlikhetstegn etterpå, slik at det blir >= og <=, så forteller man at betingelsen skal være mer enn, eller er lik 1 og 6. Vi prøver å kjøre koden på nytt. Dette er koden som kjøres:

Dette er resultatet, nå fungerer koden med tallet 1 og 6 også.

Nå går vi litt videre. Vi ser nærmere på while-løkken:

Hva om vi ønsker at programmet skal kjøre hele tiden, uten å avsluttes etter 10 sjanser? Det er faktisk ganske enkelt:

Som tidligere nevnt, så lenge betingelsen inne i while-løkken er oppfylt, vil while-løkken fortsette i det uendelige. Les høyt det som står: mens 1 er lik 1.

Det samme her, mens datahjelper er lik datahjelper.

Nå vil koden kjøre i det uendelige, uten å noen gang stoppe før du selv lukker programmet, eller utløser en feilmelding. For å sørge for at brukeren har mulighet til å avslutte programmet når brukeren gjetter riktig tall, legger vi inn en break-statement. Dette vil avbryte while-løkken og gå ut av den. Siden det ikke skjer noe mer etter while-løkken er ferdig, avsluttes programmet.

Har du allerede sett for deg hva resultatet av dette vil bli?

Håper at du lærte noe nytt i dag!

Exit mobile version