Slingor och iteration

Repetera kodrader effektivt med for- och while-loopar.

Ca 60 min · del av Programmering i Python

Begrepp i lektionen

  • for-loop
  • while-loop
  • range()
  • break
  • continue

Efter denna lektion kommer du att kunna automatisera upprepade beräkningar och databearbetning i Python med hjälp av for- och while-loopar, samt styrkommandon som break och continue.

Vad är iteration och hur fungerar while-loopar?

I programmering behöver vi ofta utföra samma instruktioner flera gånger. Att upprepa en kodsekvens kallas för iteration eller att köra en slinga (loop). Utan loopar skulle vi tvingas skriva om samma kodrader om och om igen, vilket gör koden svårläst och svår att underhålla.

En av de två huvudsakliga loop-typerna i Python är while-loopen. En `while`-loop fortsätter att köra så länge ett angivet villkor utvärderas till sant (`True`). Den fungerar i praktiken som en upprepad `if`-sats.

Syntax för while-loop

python

räknare = 0

while räknare < 5:

print("Slinga nummer:", räknare)

räknare += 1

I exemplet ovan sker följande steg:

1. Variabeln `räknare` initieras till 0.

2. Villkoret `räknare < 5` utvärderas. Eftersom 0 < 5 är sant, körs koden i loopen.

3. Utskriften görs och `räknare` ökas med 1.

4. Loopen hoppar tillbaka till villkoret och utvärderar på nytt.

5. När `räknare` når 5 är villkoret `5 < 5` falskt (`False`), och loopen avslutas.

Risken för oändliga loopar

Om du glömmer att uppdatera variabeln som ingår i villkoret (till exempel om rader som `räknare += 1` saknas), kommer villkoret alltid att vara sant. Detta skapar en oändlig loop (infinite loop), vilket gör att programmet fastnar tills det tvångsavslutas.

For-loopen och sekvenser med range()

Medan en `while`-loop styrs av ett logiskt villkor, används en for-loop främst för att iterera över en känd sekvens av värden (som en lista, en sträng eller ett talområde). `for`-loopen vet i förväg hur många gånger den ska köras baserat på sekvensens längd.

Funktionen range()

För att upprepa någonting ett bestämt antal gånger använder vi ofta den inbyggda funktionen `range()`. Den genererar en sekvens av heltak.

`range()` kan ta upp till tre argument:

  • `range(stop)`: Genererar tal från 0 upp till (men inte med) `stop`.
  • `range(start, stop)`: Genererar tal från `start` upp till (men inte med) `stop`.
  • `range(start, stop, step)`: Genererar tal från `start` till `stop` med steglängden `step`.

Exempel på for-loopar

python

Skriver ut 0, 1, 2, 3, 4

for i in range(5):

print(i)

Skriver ut udda tal: 1, 3, 5, 7, 9

for i in range(1, 10, 2):

print(i)

Iterera över tecknen i en sträng

for bokstav in "Python":

print(bokstav)

`for`-loopen är oftast säkrare än `while`-loopen eftersom risken för oändliga loopar minimeras då antal steg är förutbestämt.

Styrkommandon: break och continue

Ibland behöver vi avvika från det normala flödet i en loop. Python tillhandahåller två nyckelord för att styra slingans gång: break och continue.

break - Avbryt loopen i förtid

Kommando `break` avslutar loopen omedelbart, oavsett om villkoret fortfarande är sant eller om det finns fler element kvar i sekvensen. Programflödet hoppar direkt till den första raden kod *efter* loopen.

python

for tal in range(1, 10):

if tal == 5:

break # Avbryt hela loopen om talet är 5

print(tal)

Skriver ut: 1, 2, 3, 4

`break` används ofta i combination med en `while True`-loop för att skapa användarinteraktion som körs tills ett visst slutkommando matas in.

continue - Hoppa över aktuell iteration

Kommando `continue` avbryter bara den *pågående* iterationen och hoppar direkt vidare till nästa varv i loopen.

python

for tal in range(1, 6):

if tal == 3:

continue # Hoppa över utskriften när tal är 3

print(tal)

Skriver ut: 1, 2, 4, 5

Nästlade loopar och ackumulatormönstret

En nästlad loop (nested loop) innebär att en loop ligger placerad inuti en annan loop. För varje enskild iteration i den yttre loopen kommer den inre loopen att köra *alla* sina iterationer.

Totalt antal köromgångar

Om den yttre loopen körs N gånger och den inre loopen körs M gånger, kommer koden i den inre loopen att exekveras totalt N × M gånger.

python

Exempel: Skriva ut en multiplikationstabell (3x3)

for i in range(1, 4): # Yttre loop (1, 2, 3)

for j in range(1, 4): # Inre loop (1, 2, 3)

print(i * j, end=" ")

print() # Ny rad efter varje yttre iteration

Utskrift:

text

1 2 3

2 4 6

3 6 9

Ackumulatormönstret

Ett av de vanligaste användningsområdena för loopar är ackumulatormönstret. Det innebär att man initierar en variabel (t.ex. `summa = 0` eller `resultat = []`) *före* loopen och sedan gradvis uppdaterar variabeln under varje iteration.

python

tal_lista = [4, 8, 15, 16, 23, 42]

summa = 0 # Ackumulator

for tal in tal_lista:

summa += tal

print("Totalsumma:", summa)

Nästlade loopar används ofta för tvådimensionella datastrukturer, som matriser, schackbräden eller pixlar i en bild.

Hela kursen