Programmeren in Python/Lussen
While lus
bewerkenDe eerste lus controle structuur is het while
statement. Normaal gezien begint de interpreter bij het eerste statement en neemt dan het volgende. Controlestructuren veranderen de volgorde waarin statements uitgevoerd worden of beslissen of het al dan niet uitgevoerd moet worden. Het volgende programma maakt gebruikt van het while
statement:
Python-code: While-lus
a = 0
while a < 10:
a = a + 1
print(a)
print("Lus beëindigd.")
De uitvoer bestaat uit de getallen van 1 tot en met 10, gevolgd door de Lus beëindigd.. Dit programma werkt als volgt: de interpreter initialiseert de waarde a
op nul en ziet vervolgens while a < 10:
; de interpreter interpreteert deze Booleaanse uitdrukking en komt tot de conclusie dat deze equivalent is aan True
. Als gevolg hiervan zal de interpreter het geïndenteerde blok uitvoeren waarin de variabele a
aangepast wordt en afgedrukt wordt. Na het uitvoeren van dit blok code springt de interpreter terug naar het while-statement en deze sequentie zal zich herhalen zolang de Booleaanse expressie geldig is. Wanneer deze expressie een logische False
oplevert, zal de interpreter verder gaan met de code na het geïndenteerde blok, in dit geval de print van de string Lus beëindigd..
Hieruit volgt dus dat het van belang is om ervoor te zorgen dat de lusvoorwaarde in de lus zelf aangepast wordt, anders wordt een oneindige lus gemaakt, wat normaliter niet de bedoeling is. Een oneindige lus kan er bijvoorbeeld als volgt uitzien:
while 1 == 1:
print("Help, ik zit vast in een oneindige lus.")
Of
while True:
print("Help, ik zit vast in een oneindige lus.")
In sommige gevallen kan het natuurlijk gewenst zijn om een oneindige lus te maken, een voorbeeld hiervan is een webserver, deze heeft een oneindige lus waarin hij een connectie van een client aanvaardt en afhandelt, en hierna accepteert hij een nieuwe connectie.
For lus
bewerkenEen volgende manier om een lus te implementeren is met hulp van het for
statement. Een voorbeeld analoog aan de while lus kan er alsvolgt uitzien:
Python-code: For-lus
for a in range(1,11):
print(a)
print("Lus beëindigd.")
De uitvoer is volkomen identiek aan het while-voorbeeld: de getallen van 1 tem 10, gevolgd door de string Lus beëindigd.. De code ziet er echter verschillend uit. De eerste regel maakt gebruik van de range(start,einde)
functie. Dit genereert een array getallen:
>>> print(*range(1,11))
1 2 3 4 5 6 7 8 9 10
De startwaarde is inclusief, de eindwaarde exclusief. Maar terug naar de lus, de eerste regel maakt gebruik van het for
statement. Dit ziet er in gebruik als volgt uit for variabele in lijst:
. In dit geval zal het geïndenteerde blok opgeroepen worden voor elk element in de lijst, maar zal variabele
gelijkgesteld worden aan het huidige element in de lijst (dus de eerste keer zal variabele het eerste element uit de lijst bevatten, de tweede keer het tweede element en zo verder). Dit is een extra voorbeeld van hetzelfde principe, alleen wordt de lijst hier expliciet aangemaakt:
Python-code: For-lus
demolist = ['life',42, 'the universe', 6,'and',7,'everything']
for item in demolist:
print("The Current item is: %s" % item)
Welke volgende uitvoer geeft:
The Current item is: life The Current item is: 42 The Current item is: the universe The Current item is: 6 The Current item is: and The Current item is: 7 The Current item is: everything
Het spreekt voor zich dat het net als bij if
statements mogelijk is om while
en for
lussen te nesten, zowel onderling als met elkaar. In principe kan alles wat met een for
lus gebeurt, ook met een while
lus geschreven worden. In de praktijk is het verschil echter een nuance. Bemerk dat bij de while
lus de lusvoorwaarde binnen de lus aangepast werd. Bij de for
lus daarentegen werd vooraf, zelfs buiten de lus, bepaald over welke waarden men in de lus ging itereren. Dus indien men vooraf weet over welke waarden men gaat itereren, gebruikt men typisch een for
lus (bijvoorbeeld voor elk element in lijst ). Wanneer men binnen de lus dient te bepalen of de lus nog eenmaal uitgevoerd dient te worden, gebruikt men een while
lus (bijvoorbeeld, zolang de gebruiker niet -1 ingeeft).
Merk op dat je ook bij dictionaries een for loop kan gebruiken:
Python-code: For-lus bij een dictionary
country_codes = {"BE": "België", "LU": "Luxemburg" ,"NL": "Nederland"}
for key, value in country_codes.items():
print(key, value)
BE België LU Luxemburg NL Nederland
Break
bewerkenSoms is het nodig om een lus eerder dan voorzien te onderbreken. Dit kan om verschillende redenen. Misschien is het doel van de lus al bereikt, bijvoorbeeld je zoekt specifieke informatie in een lijst, vindt het en dan is rest van lus niet meer nodig. Of misschien wordt er een lus gebruikt, maar is er op een gegeven moment een fout en is het daardoor beter om de lus vroegtijdig te stoppen. Bijvoorbeeld, een lus gaat over een lijst van getallen om berekeningen mee uit te voeren en komt dan in de lijst een string tegen. Met een string kun je geen berekeningen doen, dus wil je de lus laten stoppen. Om de lus te stoppen kun je break
gebruiken.
Continue
bewerkencontinue
is ook een manier om de werking van een lus te beïnvloeden. In tegenstelling tot break
stopt het de lus niet, maar slaat hij code over en stuurt hij de lus naar de volgende stap.