# Loops

In dit hoofdstuk gaan we het hebben over lussen (loops), een krachtig concept waarmee je herhalende taken kunt automatiseren. Je leert hoe je met for- en while-loops efficiënt code kunt schrijven die zichzelf herhaalt.

# For-loops

### Doelstellingen

- Begrijpen hoe for-loops werken.
- Leren itereren over reeksen zoals lijsten en strings.
- Eenvoudige for-loops schrijven.

### Inhoud

**Wat is een for-loop?**

Een for-loop wordt gebruikt om over een reeks items te itereren (bijv. een lijst, een string of een range van getallen).

**Basisstructuur:**

```python
for variabele in reeks:
    # code die herhaald wordt voor elk item in de reeks
```

**Voorbeeld:**

```python
# Itereren over een lijst
fruits = ["appel", "banaan", "kers"]
for fruit in fruits:
    print(fruit)

# Itereren over een range van getallen
for i in range(5):
    print(i)  # Print getallen van 0 tot 4
```

### Activiteiten

- **Oefening:**
    
    
    - Schrijf een programma dat de getallen van 1 tot en met 10 print.
- **Strings Itereren:**
    
    
    - Itereer over de letters in een woord en print elke letter.

### Tips

- De `range()` functie kan gebruikt worden om een reeks getallen te genereren.
- Onthoud dat `range(n)` gaat van `0` tot `n-1`.

# While-loops

### Doelstellingen

- Begrijpen hoe while-loops werken.
- Leren wanneer je while-loops gebruikt in plaats van for-loops.
- While-loops schrijven met een stopconditie.

### Inhoud

**Wat is een while-loop?**

Een while-loop blijft code herhalen zolang een bepaalde conditie waar is.

**Basisstructuur:**

```python
while conditie:
    # code die herhaald wordt zolang de conditie waar is
```

**Voorbeeld:**

```python
i = 0
while i < 5:
    print(i)
    i += 1  # Verhoog i met 1
```

### Activiteiten

- **Oefening:**
    
    
    - Schrijf een programma dat getallen blijft vragen aan de gebruiker tot de gebruiker '**stop**' invoert.
- **Oneindige lussen:**
    
    
    - Begrijp wat er gebeurt als de stopconditie nooit onwaar wordt en hoe je dit kunt voorkomen.

### Tips

- Zorg ervoor dat de conditie uiteindelijk onwaar wordt om oneindige lussen te vermijden.
- Je kunt `break` gebruiken om een lus vroegtijdig te verlaten.

# Break en Continue Statements

### Doelstellingen

- Leren hoe je de uitvoering van lussen kunt beïnvloeden met `break` en `continue`.
- Begrijpen wanneer en waarom je deze statements gebruikt.

### Inhoud

**Break**

`break` beëindigt de lus onmiddellijk en gaat verder met de code na de lus.

**Voorbeeld:**

```python
for i in range(10):
    if i == 5:
        break
    print(i)  # Print 0 tot en met 4
```

**Continue**

`continue` slaat de rest van de code in de lus over voor de huidige iteratie en gaat verder met de volgende.

**Voorbeeld:**

```python
for i in range(5):
    if i == 3:
        continue
    print(i)  # Print 0, 1, 2, 4
```

### Activiteiten

- **Oefening:**
    
    
    - Schrijf een programma dat alle getallen van 1 tot 20 print, **behalve** de veelvouden van 3.
- **Zoekopdracht:**
    
    
    - Maak een programma dat in een lijst van getallen zoekt naar een specifiek getal en stopt met zoeken zodra het gevonden is.

### Tips

- Gebruik `break` spaarzaam om je code overzichtelijk te houden.
- `continue` kan handig zijn om bepaalde iteraties over te slaan.

# Geneste Lussen en Praktische Toepassingen

### Doelstellingen

- Begrijpen hoe je lussen kunt nesten (een lus binnen een lus).
- Leren hoe je lussen kunt toepassen op meer complexe problemen.
- Praktische programmeervaardigheden ontwikkelen.

### Inhoud

**Geneste lussen**

Een lus binnen een andere lus. Dit wordt vaak gebruikt bij het werken met multidimensionale gegevens.

**Voorbeeld:**

```python
for i in range(3):
    for j in range(2):
        print(f"i={i}, j={j}")
```

**Toepassing:**

- **Multiplicatietabel:**
    
     ```python
    for i in range(1, 11):
        for j in range(1, 11):
            product = i * j
            print(f"{product}\t", end="")
        print()
    ```

### Activiteiten

- **Oefening:**
    
    
    - Schrijf een programma dat een rechthoek van sterren (`*`) print met door de gebruiker opgegeven breedte en hoogte.
- **Klein project:**
    
    
    - Maak een eenvoudig spel zoals "Raad het getal" waarbij de speler moet raden welk getal de computer heeft gekozen.

### Tips

- Wees voorzichtig met de inspringing om duidelijk te zien welke code bij welke lus hoort.
- Geneste lussen kunnen snel complex worden; plan je code zorgvuldig.

# Afronding Loops

In dit hoofdstuk heb je geleerd over:

- **For-loops:** Itereren over reeksen en herhalende taken uitvoeren.
- **While-loops:** Herhaling op basis van een conditie.
- **Break en Continue:** De stroom van lussen beheersen.
- **Geneste Lussen:** Werken met complexere herhalingsstructuren.

---

## Huiswerk

- **Oefeningen:**
    
    
    - Maak alle opdrachten uit dit hoofdstuk
- **Programmeeroefeningen:**
    
    
    1. Schrijf een programma dat alle priemgetallen tussen 1 en 100 vindt.
    2. Maak een nummerpiramide zoals:
        
         ```python
        1
        22
        333
        4444
        55555
        ```
- **Voorbereiding op het volgende hoofdstuk:**
    
    
    - Lees je in over standaard functies en het maken van functies binnen Python.
    - Bekijk de video: [Functions in Python](https://www.youtube.com/watch?v=9Os0o3wzS_I)

## Extra Bronnen

- **Online Tutorials:**
    
    
    - [For-loops in Python](https://www.w3schools.com/python/python_for_loops.asp)
    - [While-loops in Python](https://www.w3schools.com/python/python_while_loops.asp)
- **Oefensites:**
    
    
    - [HackerRank - Python Loops](https://www.hackerrank.com/challenges/python-loops/problem?isFullScreen=true)

---

## Tips voor Succes

- **Plan je lussen:** Denk na over hoeveel iteraties je lus moet hebben en waarom.
- **Visualiseer:** Teken eventueel een stroomdiagram om je lussen beter te begrijpen.
- **Test grondig:** Probeer je code met verschillende inputs om er zeker van te zijn dat het correct werkt.