Løkker
While-løkker
For å utføre en blokk med kode flere ganger, kan man benytte en while-løkke. Koden inne i løkken utføres så lenge betingelsen evaluerer til True.
x = 0
while x < 5:
print("Jeg skal være snill", x)
x += 1
print("Ferdig!")
En iterasjon er en gjennomkjøring av kodeblokken inni en løkke. I eksempelet over utføres koden fem ganger, og vi sier at løkken har fem iterasjoner.
While-løkker er spesielt godt egnet for tilfeller der vi ønsker å gjenta den samme operasjonen flere ganger, men vi vet ikke på forhånd hvor mange ganger. For eksempel kan vi ønske å finne det minste heltallet \(n\) slik at \(n^2\) er større enn 1000. Ved hjelp av en løkke kan vi prøve alle mulige positive heltall helt til vi finner det vi leter etter:
n = 1
while n * n <= 1000:
n += 1
print(n, "er laveste heltall slik at n^2 er større enn 1000")
Et irriterende program.1
name = ''
while name != 'your name':
print('Please type your name.')
name = input()
print('Thank you!')
Et program for å telle antall siffer i et tall.
x = 222222
part_of_x = abs(x)
count = 0
while part_of_x > 0:
count += 1
part_of_x = part_of_x // 10
print(f"Det er {count} siffer i {x}.")
Uendelig løkke
Når man skriver en while-løkke, kan man risikere at løkken varer evig dersom betingelsen alltid blir tilfredsstilt.
x = 1
while x < 10:
print(x)
x + 1 # Glemt tilordning; variabelen a endres ikke
Hjelp, programmet mitt avsluttes ikke! For å avbryte en evig løkke, trykk
ctrl + c
når fokuset er på terminalen hvor koden kjøres.
Break og continue
Break benyttes for å bryte ut av en løkke.
while True:
print('Please type your name.')
name = input()
if name == 'your name':
break
print('Thank you!')
Continue benyttes for å hoppe over resten av kodeblokken og gå tilbake til begynnelsen av løkken (neste steg blir å sjekke betingelsen på nytt).
while True:
print("Brukernavn: ", end="")
username = input()
if username == "":
break # Avbryter løkken
if username != "admin":
print(f"Fant ikke bruker {username}")
continue # Avbryter resten av iterasjonen
print(f"Passord for {username}: ", end="")
password = input()
if password == "42":
print("Du er nå logget inn")
print("Bla bla bla")
print("Du er nå logget ut igjen")
print("Slår av maskinen nå.")
For-løkker og range
Det er ofte at vi vet på forhånd hvor mange ganger vi ønsker at løkken skal kjøres. Da bør vi benytte en for-løkke.
En for-løkke er kortere å skrive enn en while-løkke, og reduserer faren for feil og bugs.
print("------------For-løkke--------------")
for i in range(5):
print("Jeg skal være snill", i)
print("Ferdig!")
print("------------While-løkke------------")
i = 0
while i < 5:
print("Jeg skal være snill", i)
i += 1
print("Ferdig!")
Man kan angi hvor en for-løkke begynner og slutter hvor store hopp som skal gjøres mellom hver iterasjon.
print("---------For-loop--------")
for x in range(2, 19, 3):
print(x)
print("---------While-loop---------")
x = 2
while x < 19:
print(x)
x += 3
# Skriv ut tallene mellom a og b
a = 3
b = 10
print("---------For-loop---------")
for i in range(a, b + 1):
print(i, end=" ")
print()
print("---------While-loop---------")
i = a
while i <= b:
print(i, end=" ")
i += 1
print()
range()
-funksjonen gir oss en ordnet samling med tall. Funksjonen kan ta ett, to eller tre heltalls-argumenter.
# Ett argument: begynner med 0 og går opp til (og ikke
# inkludert) det gitte argumentet. Eksempel: 0 1 2 3
for i in range(4):
print(i, end=" ")
print()
# To argument: tallene begynner på det første tallet,
# og går opp til (og ikke inkludert) det andre tallet.
# Eksempel: 6, 7, 8, 9, 10
for i in range(6, 11):
print(i, end=" ")
print()
# Tre argument: de to første argumentene betyr det
# samme som for to argumenter. Det tredje argumentet
# beskriver hvor store hopp som gjøres mellom hver
# iterasjon. Eksempel: 3, 5, 7, 9 (hopper med 2)
for i in range(3, 11, 2):
print(i, end=" ")
print()
# Hopp kan også være negativ. Eksempel: 10 9 8 7 6
for i in range(10, 5, -1):
print(i, end=" ")
print()
# En range kan være tom
print("---")
for i in range(3, 3):
print(i, end=" ")
print()
for i in range(19, 3):
print(i, end=" ")
print()
for i in range(5, 10, -1):
print(i, end=" ")
print()
print("---")
En range er en samling med tall. En streng er en samling med bokstaver. En for-løkke kan brukes for å iterere over alle typer samlinger – altså både strenger, ranges, lister eller en annen type samling.
s = "foo"
for letter in s:
print(letter)
print()
for x in ["en", "liste", "med", "strenger"]:
print(x)
print()
Nøstede løkker
# Vi kan ha løkker inni løkker
rows = 3
cols = 5
for row in range(rows):
for col in range(cols):
print(f"({row}, {col})", end=" ")
print()
# Hvilken figur tegner vi her?
height = 5
for row in range(height):
for col in range(row):
print("*", end="")
print()
Stil
Benytt alltid en for-løkke hvis det er naturlig. Dette gjør det lettere å forstå koden, og er mindre utsatt for bugs som gjør at programmet blir sittende fast i en uendelig løkke.
|
|
-
Fra Automate the Boring Stuff with Python. Al Sweigart, CC BY-NC-SA 3.0. ↩︎