Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Logg inn

Valgte tags:

Filtrering:

Skriv ut:

Løkker 0: introduksjon

Løkker er det vi bruekr for å gå igjennom en samling, og gjøre samme operasjon på ett eller flere elementer etter hverandre. I Python er de viktigste nøkkelordene når det gjelder løkker for og while. For-løkker bruker nøkkelordet for og brukes hovedsaklig sammen med en samling, som for eksempel en streng, ei liste eller ei ordbok. while-løkker brukes sammen med et boolsk uttrykk, og gjør samme ting helt til det boolske uttrykket blir usant.

Å gå igjennom en samling kaller vi å iterere, og en gjennomgang er en iterasjon.

En for-løkke brukes alltid på noe som er itererbart, det vil si at det er mulig å gå igjennom samlingen ett etter ett element om gangen. Lister, ordbøker, strenger, tupler og mengder er alle itererbare.

Her er et eksempel der vi itererer gjennom ei liste med heltall, og skriver ut hvert tall ganget med 2. Vi ganger med to én gang per iterasjon, altså per gjennomgang. Når vi skriver for x in... er for ordet som viser at vi skal ha en for-løkke, x er navnet som gis til hvert element for hver iterasjon, og in bruker vi foran samlingen vi skal gå igjennom. Husk at x bør ha et navn som sier noe om hva slags verdi vi har med å gjøre, og at verdien til x endrer seg hver gang. Vi kan lese en for-løkke omtrent som "For hvert element in denne samlingen, la hvert element hete x, og gjør følgende:". Merk at in i dette tilfellet brukes annerledes enn det vi er vant med fra in som boolsk operator.

liste = [1,2,3,4,5]
for tall in liste:
    print(tall * 2)

Utskrift:

Tupler og mengder oppfører seg i dette tilfellet helt likt som lister, men ordbøker er litt annerledes. Hvis vi itererer gjennom ei ordbok uten å spesifisere noe mer enn vi gjorde i eksempelet over med lista, så skriver vi ut nøklene i ordboka:

ordbok = {'a':1,'b':2,'c':3}

for symbol in ordbok:
    print(symbol * 2)

Utskrift:

aa
bb
cc

Hvis vi skal ha med både nøkkelverdier og innholdsverdier i ei ordbok, må vi enten slå opp på nøkkelen, eller bruke metoden .items(), slik:

ordbok = {'a':1,'b':2,'c':3}
for symbol in ordbok:
    print(symbol,ordbok[symbol])

for symbol, tall in ordbok.items():
    print(symbol, tall)

De gir samme utskrift:

a 1
b 2
c 3
a 1
b 2
c 3

En while-løkke har nøkkelordet while, etterfulgt av et boolsk uttrykk, altså et uttrykk som evalueres til True eller False. Det er viktig at det er mulig for uttrykket å bli false, slik at løkken ikke varer evig. En while-løkke som ikke slutter er en vanlig grunn til at programmet "setter seg fast" og kjører, uten at det skjer noe.

Et enkelt eksempel kan være at vi spør brukeren om å skrive ord, og at vi legger disse til i ei liste, helt til brukeren skriver "ferdig". Ordet "ferdig" er da det som gjør at løkken avsluttes. Når programmet er ferdig skriver vi ut lista. Vi kan lese syntaksen som "Så lenge det er sant at...gjør følgende:"

liste = []
svar = input("Skriv et ord, eller skriv 'ferdig' for å avslutte.\n").lower()
while svar != "ferdig":
    liste.append(svar)
    svar = input("Skriv et ord, eller skriv 'ferdig' for å avslutte.\n").lower()
print(liste)

Merk at utskriften til terminalen kun vil skje når løkka er ferdig.

Eksempel på kjøring:

>>>Skriv et ord, eller skriv 'ferdig' for å avslutte.
svovel
>>>Skriv et ord, eller skriv 'ferdig' for å avslutte.
saltpeter
>>>Skriv et ord, eller skriv 'ferdig' for å avslutte.
kull
>>>Skriv et ord, eller skriv 'ferdig' for å avslutte.
ferdig
['svovel', 'saltpeter', 'kull']

Legg merke til at "ferdig" ikke kommer med i lista, siden vi legger inn ordene først etter at vi har sjekket om de er like "ferdig" eller ikke. Vi bruker .lower() for å passe på at vi avslutter selv om brukeren skriver "Ferdig" eller andre sammensetninger av store og små bokstaver.

range

En vanlig ting å bruke løkker til er for å gjenta noe et visst antall ganger. Det er minst to måter å gjøre dette på: å bruke en variabel som teller opp eller ned, sammen med en while-løkke som avsluttes når variabelen når en bestemt verdi; eller en for-løkke sammen med range. Range gir oss en (slags) liste med heltall som vi kan bruke. Vi bruker ofte variabelnavnet "i" når vi bruker range. Dette henger sammen med lignende matematisk notasjon.

Funksjonen range() tar opptil tre parametre:

Hvis vi bare spesifiserer ett argument, betyr det at vi får alle heltallene fra og med 0, til men ikke inkludert det tallet vi spesifiserer.

for i in range(8):
    print(i)

Dette gir oss:

0
1
2
3
4
5
6
7

Hvis vi spesifiserer to argumenter, så tolkes rekkevidden som fra og med det første tallet, til men ikke inkludert det andre, akkurat som med slicing.

for i in range(2,8):
    print(i)

Dette gir oss altså fra og med 2, til men ikke inkludert 8.

2
3
4
5
6
7

Hvis vi spesifiserer tre tall, så vil det tredje tallet tolkes som avstanden mellom hvert tall. Vanligvis er dette 1, men vi kan velge hva vi vil. Koden under ber altså om hvert andre tall fra og med 2, til men ikke inkludert 8:

for i in range(2,8,2):
    print(i)

Og vi får:

2
4
6