Er du lei av å skrive samme koden om igjen og om igjen? Skulle du ikke ønske det fantes en mer praktisk måte å skrive koden på? For kun 399,- kan du ta i bruk løkker! (Neida, det er helt gratis.)
Men poenget er at løkker er nyttige. La oss se litt på dem nå.
Del 1 - for
-loops med en liste
Si at vi har en liste med dyr, som i “Python 4”, men har lyst til å skrive ut alle dyrene med en liten melding, da kan vi ta i bruk en for
-loop!
Oppgave 1.1
Bruk en for-loop for å skrive ut en melding for hvert dyr i en liste.
Hvordan fungerer en for
-loop? (Med liste)
En for
-loop er en del med kode som repeterer, “looper”, igjen og igjen.
All koden som finnes inni en for
-loop blir repetert for hvert element i en liste.
Har du 10 ting i en liste, kjører for
-loopen 10 ganger.
Syntaksen er slik:
for value in liste:
# kode å repetere
value
er en variabel, denne kan du bruke hver runde, verdien til denne er basert på hva som er i listen.
Eksempel liste:
filmer = ["inception", "interstellar", "tenet", "finding nemo"]
Da kan vi skrive:
for film in filmer:
# koden her kjører 4 ganger
print(film, "er en kul film!")
Viktig med :
på slutten av for
-loop linja og inrykk på begynnelsen av neste linje. Alt som er på dette innrykket vil da høre til for
-loopen.
Svaret
dyr_liste = ["katt", "hund", "kenguru", "fisk", "fugl", "elefant", "koala", "papegøye", "måke"]
for dyr in dyr_liste:
print("Mitt favoritt-dyr er", dyr)
Dette er slik det vil bli skrevet ut:
Mitt favoritt-dyr er katt
Mitt favoritt-dyr er hund
Mitt favoritt-dyr er kenguru
Mitt favoritt-dyr er fisk
Mitt favoritt-dyr er fugl
Mitt favoritt-dyr er elefant
Mitt favoritt-dyr er koala
Mitt favoritt-dyr er papegøye
Mitt favoritt-dyr er måke
Oppgave 1.2a - En unik melding for et spesifikt dyr
Si at dyret vi skal skrive ut er "kenguru"
, hvordan kan vi skrive ut en unik melding for kun "kenguru"
?
Du kan ta i bruk en if
inni for
-loopen!
Prøv å skriv ut en unik melding for "kenguru"
.
Svaret
dyr_liste = ["katt", "hund", "kenguru", "fisk", "fugl", "elefant", "koala", "papegøye", "måke"]
for dyr in dyr_liste:
if dyr == "kenguru":
print("Kenguruer er flinke til å hoppe!")
print("Mitt favoritt-dyr er", dyr)
Legg godt merke til innrykk
Her ser dere kanskje hvorfor det er nyttig med innrykk. Vi har enda ett innrykk der det er if
, dette forteller at det hører til if
-en. Alle tre linjene er rykket inn i forhold til for
-loopen. Det betyr at alle linjene hører i og for seg til for
-loopen.
Oppgave 1.2b
Skriv deretter også ut en unik melding for "elefant"
eller et annet dyr du bestemmer selv.
Del 2 - for
-loops med range
Vi skal nå lære en ny funksjon. Den heter range
, og lar Python telle. La oss se på noen eksempler.
Vi har lyst til å kjøre en del med kode akkurat 10 ganger, hvordan kan vi gjøre det? Det naive svaret ville ha vært å kopiere den samme koden 10 ganger, men vi kan gjøre det mye bedre, vi kan bruke range
!
range
?
range
er en spesiell funksjon som lager sekvenser med tall. Det er en komplisert måte å si at du lager en liste med tall i rekkefølge.
Strukturen er som følger:
range(start, slutt, teller)
Måter å bruke range
på:
range
med sluttverdi
numbers = range(6)
Dette lager en liste med tall fra 0 til 6 (6 er ikke inkludert). Listen vil se ut som:
[0, 1, 2, 3, 4, 5]
range
med startverdi
numbers = range(2, 6)
Dette lager en liste med tall fra 2 til 6 (6 er ikke inkludert). Listen vil se ut som:
[2, 3, 4, 5]
range
med telleverdi
numbers = range(0, 10, 2)
Dette lager en liste med tall fra 0 til 10 (10 er ikke inkludert) med 2 i mellomrom (altså alle partall). Listen vil se ut som:
[0, 2, 4, 6, 8]
Oppgave 2.1a
Bruk range
med for
til å skrive ut tallene fra 0 til 9.
Svaret
for num in range(0, 10):
print(num)
Du kunne også ha skrevet det som:
numbers = range(0, 10)
for num in numbers:
print(num)
Dette blir skrevet ut:
0
1
2
3
4
5
6
7
8
9
Husk! 10 blir ikke inkludert, hvis du skal skrive ut 10 også hadde du skrevet range(0, 11)
!
Oppgave 2.1b
Bruk range
med for
til å skrive ut alle oddetall fra 0 til 50.
Hint: Oddetall er tall som ikke er delelig på 2, altså, 1, 3, 5, 7, 9, 11 også videre.
Svaret
for num in range(1, 50, 2):
print(num)
Oppgave 2.2 - Enkelt Kron/Mynt spill
La oss bruke det vi har lært så langt til å lage et enkelt mynt og kron spill der du kan spille flere runder!
Vi skal begynne med noe kode, du trenger ikke å tenke over hva alt dette betyr nå.
import random
valg = ["mynt", "kron"]
tilfeldig_valg = random.choice(valg)
Hva gjør denne koden?
Du klarer kanskje å tolke hva de siste to linjene gjør, de velger tilfeldig mellom "mynt"
og "kron"
.
Hva gjør den først linjen import random
?
import
er et nøkkelord dere ikke har sett ennå. Tro det eller ei, det er ikke alt i Python som er innebygd automatisk. For å kunne velge tilfeldige ting eller tilfeldige tall (for eksempel, trille en terning), må vi importere det først. Da skriver vi import random
. Det finnes andre ting vi kan importere også, men de skal vi ikke se på med det første.
Deretter kan vi bruke random
ved å skrive random.choice(liste)
.
Oppgave 2.2a
Spør spilleren om et valg mellom "kron"
og "mynt"
. Hint: Bruk input()
som i “Python 1”.
Svaret
import random
valg = ["mynt", "kron"]
tilfeldig_valg = random.choice(valg)
spiller_valg = input("Velg 'mynt' eller 'kron': ")
Oppgave 2.2b
Skriv kode som sjekker om du har vunnet med å sjekke om tilfeldig_valg
er lik med spiller_valg
å skriv ut en melding til brukeren! Skriv gjerne ut en melding dersom du ikke vant. Hint: bruk if
som i “Python 2”
Svaret
import random
valg = ["mynt", "kron"]
tilfeldig_valg = random.choice(valg)
spiller_valg = input("Velg 'mynt' eller 'kron': ")
if spiller_valg == tilfeldig_valg:
print("Du vant!")
else:
print("Du tapte!")
Oppgave 2.2c - Bruke for
Gjør det slik at spillet kjører tre runder ved hjelp av en for
med range()
.
Svaret
import random
valg = ["mynt", "kron"]
for runde in range(0, 3):
tilfeldig_valg = random.choice(valg)
spiller_valg = input("Velg 'mynt' eller 'kron': ")
if spiller_valg == tilfeldig_valg:
print("Du vant!")
else:
print("Du tapte!")
Hvis du lurer på hvorfor valg
ligger utenfor for
-loopen: det er litt vanskelig å forklare, men vi trenger aldri å endre verdien på det som ligger inne i lista.
Ekstraoppgaver
Oppgave A.1
Legg til en variabel som holder styr på score til brukeren. Deretter, øk verdien på den med 1 når du vinner. Hint: Den bør ligge før for
-loopen.
Svaret
import random
valg = ["mynt", "kron"]
poeng = 0
for runde in range(0, 3):
tilfeldig_valg = random.choice(valg)
spiller_valg = input("Velg 'mynt' eller 'kron': ")
if spiller_valg == tilfeldig_valg:
poeng = poeng + 1 # her øker vi verdien med 1
print("Du vant!")
else:
print("Du tapte!")
Oppgave A.2
Skriv ut poengsummen til brukeren etter at spillet er over. Hint: husk på innrykk slik at den havner utenfor for
-loopen.
Svaret
import random
valg = ["mynt", "kron"]
poeng = 0
for runde in range(0, 3):
tilfeldig_valg = random.choice(valg)
spiller_valg = input("Velg 'mynt' eller 'kron': ")
if spiller_valg == tilfeldig_valg:
poeng = poeng + 1 # her øker vi verdien med 1
print("Du vant!")
else:
print("Du tapte!")
print("Du fikk", poeng, "poeng!")
Oppgave A.3
Endre på koden slik at du spør brukeren om hvor mange runder du skal spille.
Svaret
import random
valg = ["mynt", "kron"]
poeng = 0
runder = int(input("Hvor mange runder vil du spille?"))
for runde in range(0, runder):
tilfeldig_valg = random.choice(valg)
spiller_valg = input("Velg 'mynt' eller 'kron': ")
if spiller_valg == tilfeldig_valg:
poeng = poeng + 1 # her øker vi verdien med 1
print("Du vant!")
else:
print("Du tapte!")
print("Du fikk", poeng, "poeng!")
Del 3 - while
-loops
Det siste vi skal se på i “Python 5” er while
-loops. I motsetning til for
-loops der vi vet hvor mange runder loopen skal ta, kan while
-loop brukes når vi ikke vet hvor lenge vi skal kjøre programmet.
Oppgave 3.1 - Handleliste
Lag et program som tar inn tekst fra brukeren å legger til en “handle”-liste helt til du skriver "stop"
.
Tips til framgangsmåte:
- Du må lage en tom liste til å holde styr på teksten.
[]
for tomme lister! - Du må ha en verdi å sjekke i
while
, dette kan være entekst
variabel. - Bruk
!=
(Ikke lik) sammenligningen for å sjekke om du har skrevetstop
. - Bruk en
input
for å hente ut fra brukeren, denne kan du lagre itekst
, deretter legge til i listen. - Skriv gjerne ut listen etter
while
-loopen.
Svaret
handleliste = [] # lag en tom liste
tekst = ""
while tekst != "stop":
tekst = input("Skriv et ord ('stop' for å slutte): ")
handleliste.append(tekst)
print(handleliste)
Oppgave 3.2
Hvis vi bruker en boolean
(se på typer på slutten i “Python 1” hvis du lurer på hva det betyr), kan vi få en loop til å kjøre for alltid.
Bruk en while
loop som kjører for alltid helt til brukeren gjetter rett tall eller ikke. Begynn med denne koden:
import random
tallet = int(random.randint(0, 1000))
while True:
# koden for å gjette her
Hva gjør denne koden?
Her bruker vi random.randint
for å velge et tilfeldig tall.
Med random.randint(0, 1000)
velger vi et tilfeldig tall mellom 0 og 1000. Hva skal du gjøre dersom du vil ha mellom 10 og 40? Da blir det så enkelt som random.randint(10, 40)
.
Deretter skriver vi while True:
, den vil kjøre for alltid.
Ekstra Hint
Det finnes et nøkkelord som heter break
, den vil stoppe en loop
. Den fungerer for både for
og while
loop. Bytt selvfølgelig ut *sjekk tall her*
med en faktisk if
-sjekk.
if *sjekk tall her*:
break
Svaret
import random
tallet = int(random.randint(0, 1000))
while True:
gjette_tall = int(input("Gjett ett tall"))
if gjette_tall == tallet:
break
print("Hurra! Du gjettet riktig!")
Ekstraoppgaver
Oppgave B.1
Legg til en variabel som holder styr på hvor mange ganger du måtte gjette for å få rett svar.
Svaret
import random
antall_gjett = 0
tallet = int(random.randint(0, 1000))
while True:
gjette_tall = int(input("Gjett ett tall"))
antall_gjett = antall_gjett + 1
if gjette_tall == tallet:
break
print("Hurra! Du gjettet riktig!")
Oppgave B.2
Legg til noen ekstra sjekker som sjekker om du har gjettet for høyt eller for lavt, og forteller det til brukeren.
Svaret
import random
antall_gjett = 0
tallet = int(random.randint(0, 1000))
while True:
gjette_tall = int(input("Gjett ett tall"))
antall_gjett = antall_gjett + 1
if gjette_tall < tallet:
print("Du gjettet for lavt, prøv igjen!")
if gjette_tall > tallet:
print("Du gjettet for høyt, prøv igjen!")
elif gjette_tall == tallet:
break
print("Hurra! Du gjettet riktig!")