Datahjelperne

Programmering: Bruk av variabler

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? Det burde du gjøre før du leser videre.

Artikkelen etter denne som du leser nå heter Programmering: Ta imot informasjon fra brukeren

I forrige artikkel viste jeg dere hvordan variabler og verdier fungerer. I dag skal vi gå inn i dybden på hvordan variabler kan brukes, og jeg vil også forklare hvordan du må tenke logisk når du skal programmere. Dette er programmet vi lagde i forrige artikkel (mittprogram.py)

I dag skal vi lage noe helt annet, så vi lager et nytt dokument. I dag bruker jeg programmet notepad++, som er sterkt anbefalt til programmering. Last det ned herfra

Som tidligere nevnt, så finnes det flere forskjellige funksjoner i alle programmeringsspråk, vi har lært om print og input tidligere. Nå skal vi lære om en annen funksjon som heter random. Det er et selvbeskrivende navn på funksjonen, da den brukes til å velge et tilfeldig tall. Først er det viktig å påpeke at ikke alle funksjoner er tilgjengelige uten at vi må sørge for at de blir tilgjengelig først.

print og input funksjonene er helt grunnleggende og krever ikke at vi gjør noe for at de skal fungere. random derimot krever at vi i koden importerer et bibliotek, slik at funksjonen random blir tilgjengelig for oss. Vi starter med å importere det aktuelle biblioteket:

Nå vil random-funksjonen være mulig for oss å bruke. Vi fortsetter. Vi lager en variabel som heter tilfeldig_tall.

Hva skal verdien i tilfeldig_tall være? Som vi har lært tidligere, kan man velge å bruke anførselstegn ” “ til å bestemme nøyaktig innhold i variabelen tilfeldig_tall, for eksempel:

Eller man kan velge å bruke en annen variabel:

Dette vil gi nøyaktig det samme resultatet, enten man velger den ene eller den andre løsningen.

Hva skal vi med random-funksjonen?

Som nevnt, man kan sette en verdi direkte i variabelen, i det første bildet tallet 4 i anførselstegn ” “, eller man kan sette en annen variabel som verdi, i det andre bildet har variabelen nummer verdien 4 i anførselstegn ” “, og tilfeldig_tall er satt til å være variabelen nummer. Men det er ikke alt, man kan nemlig også velge at resultatet av en funksjon skal være verdien til en variabel.

I dette tilfellet vil vi at tilfeldig_tall skal være resultatet av funksjonen random:

Som dere kan se, tilfeldig_tall sin verdi er satt til å være svaret fra funksjonen random, og etter funksjonen random har jeg fortalt funksjonen hvordan den skal oppføre seg. Ved å skrive .randint(1,6) vil jeg altså få et tilfeldig tall mellom 1 og 6, akkurat som en terning. For å sette sammen dette: random.randint(1,6)

tilfeldig_tall = random.randint(1,6)

La oss nå printe ut dette tilfeldige tallet til brukeren.

Og så må vi huske å sørge for at programmet ikke avsluttes umiddelbart etter at det starter, for da rekker vi jo ikke å lese hva det tilfeldige tallet er. Vi bruker input igjen:

Så lagrer vi filen som tilfeldig.py i mappen programmering

Vi finner frem til mappen der filen ligger og starter programmet.

Som vi ser, vi fikk tallet 5. La oss starte programmet en gang til.

Denne gangen fikk vi tallet 1. La oss nå utvide koden litt.

Som dere ser, nå har jeg laget en variabel som heter tilfeldig_tall som henter resultatet fra funksjonen random.randint(1,6), som blir et tall mellom 1 og 6.
Jeg har også laget en variabel som heter forventet_tall, jeg kunne nok ha valgt ønsket_tall, men æ, ø, og å kan ikke brukes som navn på variabler. Den satte jeg til å være “4”.

Ser dere også at jeg denne gangen tok en snarvei? Fra forrige artikkel ser vi at jeg bruker f før anførselstegn ” “ for å sikre at Python forstår at variabelen presentasjon inneholder andre variabler, og printer så ut variabelen presentasjon:

Men denne gangen har jeg gjort dette direkte i print-kommandoen:

La oss nå starte programmet og se hva som skjer.

Som vi kan se, resultatet ble:
Tilfeldig tall: 5
Forventet tall: 4
Trykk en tast for å avslutte.

Sammenligne tall

La oss sørge for at hvis tilfeldig tall blir det samme som forventet tall, så skal det printes ut “Gratulerer!” til brukeren. Først må du forstå at programmering egentlig er et eget språk, akkurat som Engelsk og Norsk. Strukturen i programmering er det samme som i dagligtale. La meg utdype dette nærmere.

Nå kan du se at jeg har lagt til
if tilfeldig_tall == forventet_tall:
print(“Gratulerer!”)

Som du kan se, det er faktisk akkurat det samme som å si det på andre språk:
Hvis tilfeldig tall er lik forventet tall, print Gratulerer!
If tilfeldig tall equals forventet tall, print Gratulerer!

Det er sånn programmering henger sammen. Kan du si det på engelsk, så kan du programmere det også. Du må bare forstå oppskriften og hvordan strukturen i koden fungerer.

Det er ikke alt, det er en annen ting som er viktig. Når du bruker funksjonen if, som altså betyr hvis, så må den forstå hvilke betingelser som skal utløse hva. I dette tilfellet, betingelsen er at tilfeldig_tall og forventet_tall er akkurat de samme tallene. Det som skal utløses er print-funksjonen som sier “Gratulerer!”. Jeg skriver if-funksjon her, men i virkeligheten heter det en if-løkke.

Som dere også kan se, det er to erlikhetstegn == i if-funksjonen. Det er fordi hvis vi bruker kun ett erlikhetstegn =, så setter vi nemlig det ene som variabel og det andre som verdi. For å sammenligne to variabler må man bruke to erlikhetstegn ==, slik at Python forstår forskjell på de to tingene du gjør.

Legger du også merke til at det er mellomrom før print-funksjonen?

Dette er rett og slett for å fortelle Python når if-funksjonen skal starte og slutte å lese hva den skal gjøre. Den starter fra kolon : som står rett etter forventet_tall øverst på bildet, og avslutter der strukturen i koden flytter seg en blokk tilbake.

I Python er det veldig viktig at alle “mellomrom”, som vi kaller “blokker” er strukturert helt riktig. Du ser at jeg har lagt til to ekstra print-funksjoner. Den ene som i tillegg til “Gratulerer!” også skriver “Du hadde rett tall!“, og den andre som skriver “Dette skrives ut uavhengig av if-funksjonen“. Fordi, som du ser, jeg har fjernet mellomrommene før den siste print-funksjonen for at Python skal forstå at det er her if-funksjonen er ferdig.

Hvis jeg glemmer å strukturere alle delene i blokkene på samme sted eller gjør det feil, som jeg viser i dette bildet, så vil jeg få en feilmelding når jeg starter koden. Dette er uakseptabelt for Python, som krever at brukeren tenker på strukturen og holder alle deler av “blokken” på samme sted. Koden under vil produsere en feilmelding:

Nå kjører vi koden, og som vi ser, første gangen jeg kjører koden, så er ikke tallene de samme. Jeg prøver gjentatte ganger helt til jeg oppfyller kriteriene i “if”-funksjonen.

Endelig fikk jeg tilfeldig tall 4:

Men her er det noe som mangler. Hvor ble det av meldingen “Gratulerer!” og “Du hadde rett tall!” ? Tilfeldig tall og forventet tall er jo 4 begge to. Hvorfor utløser ikke dette betingelsen i if-funksjonen?

Forskjell på Integer og String

Når man setter en variabel med en verdi som jeg har gjort i koden min, så må man også ha i bakhodet at det er forskjell på det som heter for Integer og det som heter for String. Forskjellen mellom de to tingene er at de også forteller hva innholdet faktisk består av. Hvis verdien er en string, betyr det at det ikke er garantert at innholdet kun er tall. Det kan være bokstaver og andre tegn inne i en string, som altså defineres mellom anførselstegn ” “ der vi setter verdien, som på dette bildet.

En Integer derimot, garanterer at verdien er et tall, og ikke inneholder noe annet, som f.eks. bokstaver eller spesialtegn. Dette er nyttig å vite hvis du skal f.eks. lage en kalkulator basert på hva brukeren taster inn i kalkulatoren. Hva om brukeren taster inn en bokstav? Da vil ikke kalkulatoren fungere korrekt med mindre du fanger opp tidligere i koden at det som ble lagt inn ikke er et tall.

Ettersom funksjonen random, altså variabelen tilfeldig_tall alltid er en Integer, og vi har definert en Streng (String på engelsk) i forventet_tall, feiler altså if-funksjonen å detektere at de to egentlig er helt like, bare at de har forskjellig data-type i seg. Vi må derfor konvertere strengen “4” til en integer, og det gjør vi ved hjelp av funksjonen int.

Nå prøver vi koden på nytt, jeg prøver den gjentatte ganger helt til tilfeldig tall blir til 4:

Som vi kan se nå, fordi jeg konverterte strengen “4” til en integer, klarer nå if-funksjonen å se at dette er to helt like verdier. if-funksjonen kan altså kun sammenligne innhold av samme datatype, enten det er to strenger eller to tall (Som kalles integer)

La oss prøve å gjøre det motsatt. Denne gangen konverterer vi tilfeldig_tall fra en Integer til en Streng med funksjonen str, og gjør ingenting med forventet_tall:


Dette vil gi akkurat samme resultat som å konvertere forventet_tall til en Integer. Det viktigste er at det som if-funksjonen skal sammenligne har samme datatype.

Håper du henger med, for nå går vi litt dypere inn i det med if-løkker:

For å oversette dette fra engelsk: Hvis tilfeldig tall er lik forventet tall, print “Gratulerer!”, og print “Du hadde rett tall!”, og så skal neste if-løkke kjøres: Hvis variabelen navn er satt til Vidar, skal den også printe ut “Næmmen, er det deg, Vidar?! Så hyggelig!”, hvis ikke den er satt til Vidar, print ut “Det er ikke deg, Vidar…”

Som du ser, så bruker jeg en else og strukturerer den slik at den er i samme blokk som if, slik at det blir til hvis og hvis ikke. Husk at strukturen har mye å si for hvordan koden oppfører seg.

Koden som vises over er ikke den samme som på bildet under. Disse to vil gi to helt ulike resultater, selv om koden teknisk sett er identisk. Det handler om hvordan koden er plassert.

Som man kan se, struktur i “blokker” er veldig viktig for Python-kode. Håper du lærte noe nyttig idag!

Exit mobile version