Gå till innehållet

for-loopen (Python)

for upprepar något för varje sak i en lista eller ett intervall. Med range() kan du enkelt räkna.

Mål för denna sida

  • Förstå hur range(start, stopp, steg) funkar
  • Skriva enkla for-loopar och nästlade loopar
Python
for i in range(1, 10):
    print("Detta är rad", i)

Öka med 10 åt gången:

Python
1
2
3
print("Årtionderna på 2000-talet börjar på åren...")
for år in range(2000, 2100, 10):
    print("årtionden", år)

Loop i loop

Python
1
2
3
4
for årtionde in range(2000, 2100, 10):
    print("årtionde", årtionde)
    for år in range(1, 6):
        print("år =", årtionde + år)

Vanliga misstag

  • Glömma att range stannar före stopp-värdet (range(1, 5) ger 1,2,3,4).
  • Negativt steg kräver att start > stopp, t.ex. range(10, 0, -1).

Uppgifter

1) Skriv ut talen 40 till 80, ett per rad, med en for-loop.

2) Skriv ut talen 50 till 1 med en for-loop.

3) Skriv ut talet och dess kvadrat från 0 till 50.

4) Läs två heltal a < b. Skriv alla heltal mellan a och b separerade med mellanslag.

Extra:

5) Skriv ut vart 5:e årtal från 1495 ned till 1400.

6) Skriv ut alla tal 1..30 som inte är delbara med 4. Använd continue.

7) Rita en ihålig rektangel med X. Bredd och höjd från användaren.

8) Skriv följden: 10..30, sedan 200..180 (baklänges), sedan 1000, 1050, ... 1400.

9) Läs heltal tills användaren säger nej. Skriv ut största talet.

10) FizzBuzz 1..100: ersätt 3→Fizz, 5→Buzz, båda→FizzBuzz.

11) Rita en rätvinklig triangel med höjd som användaren anger.

For över listor (vardagsnära)

Loopar är inte bara för tal. Du kan gå igenom en lista med namn, poäng eller ord.

Python
1
2
3
namn = ["Ava", "Noah", "Eli"]
for elev in namn:
    print("Hej", elev)

Vill du ha både index (platsnummer) och värde, använd enumerate:

Python
1
2
3
frukter = ["äpple", "banan", "päron"]
for i, frukt in enumerate(frukter, start=1):
    print(f"{i}. {frukt}")

Loop över tecken i en sträng:

Python
1
2
3
ordet = "PYTHON"
for bokstav in ordet:
    print(bokstav)

Små, roliga mönster (ASCII-grafik)

Python
bredd = 5
for i in range(1, bredd + 1):
    print("*" * i)  # växande triangel

print()

höjd = 4
bredd = 8
for r in range(höjd):
    if r == 0 or r == höjd - 1:
        print("#" * bredd)           # översta/understa kant
    else:
        print("#" + " " * (bredd-2) + "#")  # väggar

Mini-projekt 1: Multiplikationsträning

Skriv ut tabellen för ett tal användaren väljer.

Python
1
2
3
tal = int(input("Vilken tabell vill du träna (2-12)? "))
for i in range(1, 11):
    print(f"{tal} x {i} = {tal * i}")

Utmaning: - Slumpa frågor och räkna poäng (kräver random).

Mini-projekt 2: Liten framstegsmätare

Python
1
2
3
4
5
steg = 10
for i in range(steg + 1):
    klart = "█" * i
    kvar = "-" * (steg - i)
    print(f"[{klart}{kvar}] {i*10}%")

Snabba utmaningar

12) Givet en lista med längdhopp i meter, skriv ut bästa hoppet och vilket varv det var. Tips: enumerate.

13) Be användaren skriva ett ord och skriv ut en ram runt ordet, t.ex.:

Text Only
1
2
3
#########
# hej    #
#########

14) Skriv ut alla jämna tal 2..100 på en rad, separerade med mellanslag.

15) Lista till stor bokstav: gör en lista med namn och skriv varje namn med första bokstaven stor (.capitalize()).

Hitta felen! (5 fel)

Koden ska rita en ram och skriva siffror 1..5. Rätta fem fel.

Python
bredd = 5
for i in range(1, bredd):
    print("*" * i)
for i in range(5, 0):
    print("*" * i)

for r in range(3):
    for c in range(3):
        print(r, c)
    print(r, c)

for i in range(1, 6):
    print(i * " ")
print("i =", i)

Facit

Python
bredd = 5

# Fix 1: Inkludera 5 → range(1, bredd + 1)
for i in range(1, bredd + 1):
    print("*" * i)

# Fix 2: Baklänges kräver negativt steg
for i in range(5, 0, -1):
    print("*" * i)

# Fix 3: Undvik att använda c utanför inre loopen
for r in range(3):
    for c in range(3):
        print(r, c)
    print("Rad klart:", r)

# Fix 4: Skriv något innehåll istället för bara mellanslag
for i in range(1, 6):
    print(str(i) * i)

# Fix 5: Använd inte i efter loopen i onödan
print("Klar med mönstren")