07C: Loops

Les 7 kent drie delen A, B, C die in een willekeurige volgorde kunnen worden doorgenomen.

Tot nu toe hebben we een aantal basis programmeeropdrachten leren kennen (bijv. het toekennen van een waarde en printen) en ook het if statement. In deze les introduceren we loops (lussen) (ook wel de herhaal opdracht genoemd of iteratie): een manier om de computer keer op keer hetzelfde te laten doen (of dezelfde soort dingen). Bijvoorbeeld, bij het controleren van de spelling komt ieder woord in een document aan bod door de loop. We zullen twee soorten loops van Python beschrijven: while loops en for loops.

while Loops

Een while statement herhaalt een aantal regels uit je programma keer op keer zolang er aan een bepaalde voorwaarde wordt voldaan. Hier volgt een voorbeeld:

Voorbeeld: Aftellen

Hier volgt de algemene structuur:

  • De eerste regel bestaat uit while «voorwaarde»: waarbij «voorwaarde» een uitdrukking is die True (waar) or False (niet waar) oplevert (een Booleaanse uitdrukking, zoals bij if statements).
  • Daarna volgt een blok bestaande uit opdrachten dat inspringt (net zoals bij het if statement) dat steeds weer wordt uitgevoerd. Dit wordt de body genoemd.
  • Wanneer je het programma uitvoert, gebeurt het volgende:
    1. De voorwaarde wordt getest. Als de voorwaarde False (onwaar) is, stopt de loop, en gaat de code na de body van de loop verder.
    2. Als de voorwaarde True (waar) is, dan wordt de body uitgevoerd waarbij de opdrachten van boven naar beneden doorlopen worden.
    3. Begin weer bij 1.

Programmeeroefening: Countup
Pas het voorbeeld hierboven aan zodat het resultaat een programma is waarbij we vooruit tellen, beginnend bij 1 en dan tot 10, en print dan Boem!
Type de invoer voor je programma hieronder in.

Met loops kun je gemakkelijk een programma schrijven dat niet meer stopt, omdat het in een eeuwigdurende loop terecht is gekomen.
Voorbeeld
Oneindige loop
Je krijgt een foutmelding "Time Limit Exceeded" (tijdlimiet overschreden). Dat komt doordat de CS Circles web server een tijdslimiet heeft; na 1 seconde wordt het programma afgebroken. Wanneer je het programma thuis uitvoert, dan zou het altijd doorlopen (totdat je het zelf beëindigt). 

for Loops

Er is nog een andere soort loop in Python; de for loop. In veel situaties kunnen beide soorten loops (for/while) worden gebruikt. Maar soms is de een eenvoudiger dan weer de ander, waardoor het nuttig is om ze beide te kennen. Een for loop wordt gebruikt om gemakkelijk een rij getallen te doorlopen  (of zoals we in een volgende les zullen zien, iedere lijst met data).

Voorbeeld
Voorbeeld van een for loop: opwaarts tellen

De algemene structuur van een numerieke for loop is

for «variabeleNaam» in range(«startWaarde», «eindWaarde»):
  «inspringend blok met opdrachten, dat de "body" van de loop wordt genoemd»
Zoals gebruikelijk kan de body meerdere regels lang zijn, zolang de regels maar evenveel inspringen. Eerst wordt de loop body uitgevoerd met variabeleNaam gelijk aan startWaarde. Daarna wordt het herhaald met variabeleNaam gelijk aan startWaarde+1,dan opnieuw met startWaarde+2, en zo voort. Dit gaat zo door totdat variabeleNaam de waarde eindWaarde-1 heeft bereikt, en daarna stopt de loop.

De loop eindigt met eindWaarde-1, en niet met eindWaarde! Dit heeft dus veel weg van de manier waarop substring indexes werken (zie les 7A).
Voorbeeld

Hier volgt een voorbeeld van een for loop in een andere for loop.

Voorbeeld
Een vierkant van 5 bij 5 printen.
Merk opS = S + '*' zet een * aan het eind van de string S (geleerd in les 7A).

Programmeeroefening: Star triangle
Wijzig voorgaand programma op twee manieren. Ten eerste teken een driehoek in plaats van een vierkant  zoals: ◣. Ten tweede, in plaats van altijd 5 regels af te drukken zou het de gewenste grootte via input moeten verwerven. Bijvoorbeeld, wanneer de invoer 3 is, dan is de uitvoer:

*
**
***
Klik hier voor een aanwijzing. 
Type de invoer voor je programma hieronder in.

De break en continue opdrachten

De break opdracht is te vergelijken met een nooduitgang bij een while of for loop: break veroorzaakt een onmiddellijke sprong naar de opdrachten na het einde van body van de loop. Hier is een voorbeeld van een break: het leest alle invoer regels totdat er één gevonden wordt die zegt "END".

Voorbeeld
Een loop door reels met input

De continue opdracht skipt de rest van een loop, waarna de body herhaald wordt met de eerstvolgende uit de range (meestal de eerstvolgende "iteratie" genaamd).

Voorbeeld

Oefeningen

Programmeeroefening: Kwadraten
Kwadraten zijn gehele getallen die gelijk zijn aan K × K. Zo is bijvoorbeeld 9 een kwadraat want 3 × 3 = 9. Schrijf een programma dat een geheel getal n via input inleest en als uitvoer de kwadraten kleiner dan n geeft. Elk op een regel in opklimmende volgorde. Wanneer bijvoorbeeld de invoer 16 is dan is de correcte uitvoer:

1
4
9
Hint
Type de invoer voor je programma hieronder in.

Programmeeroefening: Skipping
Voeg extra regels toe aan het voorbeeld "Loop door alle regels met input" van hierboven toe (we hebben het programma al voor je gekopieerd) door een extra eis toe te voegen: iedere regel die gelijk is aan SKIP moet niet worden afgedrukt en moet ook niet tot gevolg hebben dat de teller wordt opgehoogd. Voer het programma uit om een voorbeeld te bekijken. Hint
Type de invoer voor je programma hieronder in.

Programmeeroefening: Delers vinden
Als a × b = n, dan noemen we a ×  een factordeling van n. Schrijf in deze oefening een programma dat een positief geheel getal n via input inleest, en alle  factordelingen van  n als uitvoer heeft;  daarbij moet  de uitvoer eruit zien als in het voorbeeld hier beneden voor n=10.

1 times 10 equals 10
2 times 5 equals 10
5 times 2 equals 10
10 times 1 equals 10
Hint
Type de invoer voor je programma hieronder in.