If-setninger, for-løkker og while-løkker for styring av programflyt.
Når koden må ta valg
Fram til nå har programmene dine kanskje vært litt som en oppskrift du leser fra topp til bunn, linje for linje. Men tenk på et ekte program: en vaskemaskin som velger skylletid ut fra hvor skitne klærne er, eller et spill som sjekker om du har vunnet. Slike programmer må kunne ta valg og gjenta handlinger. Det er nettopp dette kontrollstrukturer og løkker gir oss.
Kontrollstrukturer lar oss bestemme hvilke kodelinjer som skal kjøres ut fra en betingelse. Løkker lar oss gjenta kode uten å skrive den samme linja hundre ganger. Uten disse to verktøyene ville programmene våre vært nesten ubrukelige. Med dem kan vi få datamaskinen til å reagere, telle, gjenta og bygge mønstre. La oss se hvordan.
If, elif og else: programmets veikryss
En if-setning er som et veikryss: koden kjører bare hvis en betingelse er sann. Du skriver if betingelse: og rykker inn linjene som skal kjøre når betingelsen er True. I Python er innrykket -- vanligvis fire mellomrom -- selve måten språket forstår hvilke linjer som hører sammen. Andre språk bruker krøllparenteser, men Python bruker innrykk.
Vil du sjekke flere muligheter, legger du til elif (else if) og til slutt else for alt annet. Tenk deg en karakterberegning ut fra poeng: if poeng >= 90: gir karakter 6, elif poeng >= 77: gir 5, elif poeng >= 60: gir 4, og slik nedover til en else: som fanger opp resten med karakter 1. Python sjekker betingelsene ovenfra og ned, og så snart én er sann, kjøres den blokken -- resten hoppes over.
Det er verdt å stoppe ved et eksempel. Si at x = 15. Vi sjekker if x > 20: -- usant. Så elif x > 10: -- sant, for 15 er større enn 10. Da skrives "Medium" ut, og else-blokken kjøres aldri. Rekkefølgen betyr alt: den første betingelsen som slår til, vinner.
Løkker: la maskinen gjøre det kjedelige
Skal du legge sammen tallene fra 1 til 100, vil du neppe skrive hundre linjer. Her kommer løkkene inn. En for-løkke gjentar kode et bestemt antall ganger, ofte ved hjelp av range(). Skriver du for i in range(5): og skriver ut i, får du 0, 1, 2, 3, 4 -- den teller fra null og stopper før tallet du oppga. Du kan også gi range(start, slutt) eller range(start, slutt, steg). Skriver du range(2, 10, 2), får du 2, 4, 6, 8. Et lite snublepunkt: range(1, 8, 3) gir 1, 4, 7 -- neste ville vært 10, som er for stort.
For-løkker kan også gå gjennom strenger og lister. Vil du summere 1 til 100, starter du med total = 0 og kjører for i in range(1, 101): total = total + i. Resultatet er 5050 -- samme sum som Gauss visstnok regnet ut som barn.
Noen ganger vet du ikke på forhånd hvor mange runder du trenger. Da bruker du en while-løkke, som gjentar koden så lenge en betingelse er sann. En teller som går while teller < 5: og øker med én hver runde skriver ut 0 til 4. Men pass på: hvis betingelsen aldri blir usann, får du en uendelig løkke. Sørg alltid for at noe inne i løkken endrer betingelsen, ellers kjører programmet i evig tid.
Break, continue og løkker inni løkker
Noen ganger vil du hoppe ut av en løkke før den er ferdig, eller hoppe over én bestemt runde. Til det har vi to nøkkelord. break avbryter løkken umiddelbart og hopper helt ut. Kjører du for i in range(10): og bryter ved if i == 5: break, skrives bare 0, 1, 2, 3, 4 ut -- ved 5 stopper alt. continue er mildere: den hopper over resten av denne runden og går videre til neste. Med for i in range(6): og if i == 3: continue, skrives 0, 1, 2, 4, 5 -- tretallet hoppes over, men løkken fortsetter.
De to kan kombineres. Tenk på for i in range(1, 6): der if i == 3: continue og if i == 5: break. For i=1 og i=2 skrives tallet ut. Ved i=3 hopper continue over utskriften. i=4 skrives ut. Ved i=5 stopper break hele løkken før noe skrives. Resultatet blir 1 2 4.
Til slutt møter vi nøstede løkker -- en løkke inne i en annen. For hver runde i den ytre løkken kjøres hele den indre. Vil du skrive et rektangel av stjerner med tre rader og fire kolonner, lar du den ytre løkken styre radene og den indre kolonnene; print-setningen kjøres da ganger. Et finere mønster lager du ved å la antall stjerner følge radnummeret: rad 1 får én stjerne, rad 2 får to, og slik vokser trekanten nedover. Nøstede løkker er også nøkkelen til å finne primtall: den ytre løkken går gjennom tallene, den indre sjekker om noe deler dem -- og finner du en deler, setter du er_primtall = False og bryter ut. Mellom 2 og 50 dukker da 2, 3, 5, 7, 11, 13 og resten av primtallene opp.
Oppsummering
Nå har du verktøyene som lar programmer tenke og gjenta. If-setninger med elif og else lar koden ta valg ut fra betingelser, og Python sjekker dem ovenfra og ned til én slår til. For-løkker med range() gjentar kode et bestemt antall ganger, mens while-løkker kjører så lenge en betingelse holder -- men pass på den uendelige løkken.
Med break kan du avbryte en løkke tidlig, og med continue hoppe over enkeltrunder. Til slutt lar nøstede løkker deg bygge mønstre, tabeller og algoritmer som primtallssøk, der den ytre og indre løkken samarbeider. Til sammen er dette grunnmuren i nesten all programmering du kommer til å skrive.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.