Programmering nivå 2

Kap 1.5 – Loopar och upprepning

Använd for- och while-loopar för att upprepa kod på ett kontrollerat sätt.

Mål med lektionen

  • Förstå skillnaden mellan for- och while-loopar.
  • Veta när du ska använda vilken typ av loop.
  • Kunna kombinera loopar med funktioner och villkor.
  • Använda break och continue på ett medvetet sätt.

Så här lär du dig bäst

Börja med att titta på vad koden försöker upprepa - vad är mönstret? Skriv egna exempel, men ändra siffror, ordning och logik för att se hur programflödet påverkas. Det är så du tränar upp förmågan att använda loopar med självförtroende.

Vad är en loop?

En loop används när du vill upprepa något - till exempel skriva ut flera rader, fråga flera gånger eller gå igenom en lista.

for-loop - När du vet hur många gånger

for i in range(5):
    print(f"This is line {i}")

Denna loop kör fem gånger (från 0 till 4). Variabeln i ökar automatiskt varje varv.

Exempel - summera tal:

total = 0
for i in range(1, 6):
    total += i
print(f"Sum: {total}")

Interaktiv övning: summera med for-loop

Testa hur en for-loop går igenom talen i en bestämd ordning och bygger upp en summa steg för steg.

Prova till exempel att:

  • skriva 5 för att summera 1 till 5
  • skriva 10 och se hur fler varv körs
  • skriva text i stället för ett tal och se felmeddelandet
Tryck på Kör kod för att testa programmet.

Programmering 2-koppling: en for-loop passar bra när du vet vilka värden loopen ska gå igenom.

while-loop - När du inte vet hur många gånger

En while-loop kör så länge ett villkor är sant.

password = ""
while password != "secret":
    password = input("Enter password: ")
print("Access granted.")

Det här används ofta för inmatning eller oklara förlopp där du inte vet i förväg hur många iterationer som behövs.

Interaktiv övning: upprepa med while-loop

Testa hur en while-loop fortsätter fråga tills villkoret blir falskt. Skriv ett försök i taget, precis som i ett vanligt Python-program.

Prova till exempel att:

  • skriva test först och secret nästa gång programmet frågar
  • skriva secret direkt och se att loopen bara kör ett varv
  • skriva flera felaktiga försök och se att loopen fortsätter fråga
Tryck på Starta program för att testa programmet.

Programmering 2-koppling: en while-loop passar när du inte vet i förväg hur många försök som behövs.

break och continue

  • break avslutar loopen direkt.
  • continue hoppar över resten av ett varv och går till nästa.

Exempel:

for i in range(10):
    if i == 7:
        break
    if i % 2 == 0:
        continue
    print(i)

Denna kod skriver ut alla udda tal före 7.

Kombinera loopar och funktioner

Loopar blir tydligare när du bryter ut delar i funktioner.

def print_menu():
    print("1. Visa saldo")
    print("2. Sätt in pengar")
    print("3. Ta ut pengar")
    print("4. Avsluta")

def run():
    balance = 500
    while True:
        print_menu()
        choice = input("Välj alternativ: ")
        if choice == "1":
            print(f"Saldo: {balance} kr")
        elif choice == "2":
            amount = int(input("Belopp: "))
            balance += amount
            print(f"Du satte in {amount} kr.")
        elif choice == "3":
            amount = int(input("Belopp: "))
            balance -= amount
            print(f"Du tog ut {amount} kr.")
        elif choice == "4":
            break
        else:
            print("Ogiltigt val.")

run()

Här används while True för en meny som körs tills användaren vill avsluta.

Interaktiv övning: realistisk meny med while True

Testa en enkel bankomatmeny. Välj ett alternativ, kör valet och titta på resultatet innan du väljer nästa alternativ. Programmet körs tills valet är 4.

Prova till exempel att:

  • välja 1 för att visa saldo
  • välja 2, skriva ett belopp och sedan välja 1 för att se att saldot ändras
  • välja 9 och se hur else-grenen hanterar fel val
1. Visa saldo 2. Sätt in pengar 3. Ta ut pengar 4. Avsluta Välj ett alternativ och tryck på Kör val.

Programmering 2-koppling: menyn visar hur funktioner, loopar och villkor kan samarbeta i ett program som känns mer som en riktig applikation.

Öva själv

Övning 1: Räkna från 1 till 10

Skriv ett program som använder en for-loop och range för att skriva ut talen från 1 till 10. Varje tal ska skrivas på en egen rad.

Kontrollera programmet

  • Det första talet som skrivs ut ska vara 1.
  • Det sista talet som skrivs ut ska vara 10.
  • Sammanlagt ska tio tal skrivas ut.

Fundera: Vilket stoppvärde behöver du använda i range för att talet 10 ska komma med?

När du har försökt själv: visa lösningsförslaget till övning 1 på GitHub.

Övning 2: Tal som är delbara med 4

Skriv ett program som går igenom talen från 1 till 30. Använd en for-loop och ett villkor för att bara skriva ut tal som är delbara med 4.

Kontrollera programmet

  • Det första talet som skrivs ut ska vara 4.
  • 16 ska skrivas ut.
  • 30 ska inte skrivas ut.

Fundera: Hur kan operatorn % användas för att kontrollera om ett tal är jämnt delbart med 4?

När du har försökt själv: visa lösningsförslaget till övning 2 på GitHub.

Övning 3: Gissa det hemliga talet

Välj ett hemligt heltal och spara det i en variabel. Programmet ska använda en while-loop för att fråga användaren efter en gissning tills svaret är rätt. Efter en felaktig gissning ska programmet skriva "Försök igen". När användaren gissar rätt ska programmet skriva "Rätt gissat!".

Testa programmet

  • Gissa rätt direkt och kontrollera att loopen avslutas.
  • Gissa fel två gånger och därefter rätt.

Fundera: Varför passar en while-loop bättre än en for-loop när du inte vet hur många gissningar som behövs?

När du har försökt själv: visa lösningsförslaget till övning 3 på GitHub.

Övning 4: Hoppa över och avsluta

Skriv ett program som går igenom talen från 1 till 20. Jämna tal ska hoppas över med continue. När loopen når talet 15 ska den avslutas med break. Övriga tal ska skrivas ut.

Kontrollera programmet

  • Endast udda tal som är mindre än 15 ska skrivas ut.
  • 2 och 8 ska inte skrivas ut.
  • 15 och talen efter 15 ska inte skrivas ut.

Fundera: Vad är skillnaden mellan hur continue och break påverkar loopen?

När du har försökt själv: visa lösningsförslaget till övning 4 på GitHub.

Övning 5: Summera jämna tal

Svårare övning: Här kombinerar du en funktion, return, en loop och ett villkor.

Skriv funktionen sum_even_numbers(limit). Funktionen ska använda en for-loop för att summera alla jämna tal från 1 till och med limit och sedan returnera summan. Huvudprogrammet ska fråga användaren efter gränsen, anropa funktionen och skriva ut resultatet.

Testa programmet med

  • 6, vilket ska ge summan 12.
  • 10, vilket ska ge summan 30.
  • 1, vilket ska ge summan 0.

Fundera: Varför ska variabeln som lagrar summan skapas före loopen?

När du har försökt själv: visa lösningsförslaget till övning 5 på GitHub.

Övning 6: Kontrollera flera besökare

Svårare övning: Här kombinerar du funktioner, returvärden, logiska uttryck, villkor och en loop.

Skapa ett program som kontrollerar flera besökare till ett evenemang. Skriv en funktion som tar emot en besökares ålder och om personen har biljett. Funktionen ska returnera True om personen är minst 18 år och har biljett, annars False.

Huvudprogrammet ska använda en while-loop och fortsätta fråga efter nya besökare. Om användaren skriver åldern 0 ska loopen avslutas med break. För varje annan besökare ska programmet fråga om biljett och skriva om personen får gå in. Programmet ska också räkna hur många som får gå in och skriva ut antalet efter loopen.

Testa programmet med

  • Ålder 20 och biljett ja.
  • Ålder 17 och biljett ja.
  • Ålder 25 och biljett nej.
  • Ålder 0 för att avsluta och visa antalet godkända besökare.

Fundera: Varför behöver kontrollen av åldern 0 göras innan programmet frågar om biljett?

När du har försökt själv: visa lösningsförslaget till övning 6 på GitHub.

Reflektion

  • När använder du for och när passar while bättre?
  • Hur kan du göra en loop mer läsbar?
  • Har du testat att bryta en loop med break? Hur påverkade det flödet?

Tillbaka till Kapitel 1