Les 7 kent drie delen A, B, C die in een willekeurige volgorde kunnen worden doorgenomen.
Tot nu toe hebben we een aantal basisprogrammeeropdrachten leren kennen (bijv. het toekennen van een waarde aan een variabele en het afdrukken van een waarde) en ook de if
-opdracht. In deze les introduceren we lussen (Eng.: loops) (ook wel de herhaal-opdracht genoemd of iteratie): een manier om de computer dezelfde opdrachten vele keren na elkaar te laten uitvoeren. Bijvoorbeeld, bij het controleren van de spelling van een document komt ieder woord in het document aan bod; zoiets programmeer je typisch met een lus. We zullen twee soorten lussen van Python beschrijven: while
-lussen en for
-lussen.
while
-lussen
Een while
-opdracht herhaalt een aantal regels uit je programma keer op keer zolang er aan een bepaalde voorwaarde wordt voldaan. Hier volgt een voorbeeld:
Hier volgt de algemene structuur:
- De eerste regel bestaat uit
while «voorwaarde»:
waarbij «voorwaarde» een uitdrukking is dieTrue
(waar) ofFalse
(onwaar) oplevert (een Booleaanse uitdrukking dus, zoals bijif
-opdrachten). - Daarna volgt een blok bestaande uit opdrachten die inspringen (net zoals bij de
if
-opdracht) dat steeds weer wordt uitgevoerd. Dit wordt het lichaam (Eng.: body) genoemd. - Wanneer je het programma uitvoert, gebeurt het volgende:
- De voorwaarde wordt getest. Als de voorwaarde
False
is, stopt de lus, en voert Python de code uit die na de lus komt in het programma. - Als de voorwaarde
True
is, dan wordt het lichaam uitgevoerd, waarbij de opdrachten van het lichaam van boven naar beneden doorlopen worden. Ga dan weer naar Stap 1.
- De voorwaarde wordt getest. Als de voorwaarde
Met lussen kun je gemakkelijk een programma schrijven dat niet meer stopt, omdat het in een eeuwigdurende lus (ook een oneindige lus genoemd) terecht is gekomen. Je krijgt een foutmelding "Time Limit Exceeded" (tijdlimiet overschreden). Dat komt doordat de CS Circles-webserver een tijdslimiet heeft; na 1 seconde wordt het programma afgebroken. Wanneer je het programma thuis uitvoert, dan blijft het eeuwig doorlopen (totdat je het zelf beëindigt). |
for
-lussen
Er is nog een andere soort lus in Python; de for
-lus. In veel situaties kunnen beide soorten lussen (for
/while
) worden gebruikt. Maar soms is de ene eenvoudiger en dan weer de andere, waardoor het nuttig is om ze beide te kennen. Een for
-lus wordt gebruikt om gemakkelijk een rij getallen te doorlopen (of zoals we in een volgende les zullen zien, iedere lijst met data).
De algemene structuur van een numerieke for
-lus is
for «variabeleNaam» in range(«startWaarde», «eindWaarde»): «inspringend blok met opdrachten, dat de "body" van de lus wordt genoemd»Zoals gebruikelijk kan het lichaam meerdere regels lang zijn, zolang de regels maar evenveel inspringen. Eerst wordt het luslichaam uitgevoerd met
variabeleNaam
gelijk aan startWaarde
. Daarna wordt het herhaald met variabeleNaam
gelijk aan startWaarde+1
, dan opnieuw met startWaarde+2
, enzovoort. Dit gaat zo door totdat variabeleNaam
de waarde eindWaarde-1
heeft bereikt; na die laatste uitvoering van het luslichaam (de laatste iteratie van de lus dus) stopt de lus.
De lus eindigt met eindWaarde-1 , en niet met eindWaarde ! Dit heeft dus veel weg van de manier waarop substring-indices werken (zie les 7A).
|
Het lichaam van een lus kan gerust zelf ook weer een lus bevatten. (We spreken van geneste lussen (Eng.: nested loops).) Bijvoorbeeld:
De opdrachten break
en continue
De opdracht break
is te vergelijken met een nooduitgang bij een while
- of for
-lus: break
veroorzaakt een onmiddellijke sprong naar de opdrachten na het einde van het lichaam van de lus. Hier is een voorbeeld van een break
: het leest alle invoerregels totdat er één gevonden wordt die zegt "END"
.
De continue
-opdracht slaat de rest van de huidige lusiteratie (de uitvoering van het luslichaam die momenteel bezig is) over, waarna verdergegaan wordt met de volgende iteratie (de volgende uitvoering van het luslichaam, dus bv. voor de volgende waarde van de range
).