Programmeren in Python/Lussen
Uit Wikibooks
| Vorige: Conditionele statements | Index | Volgende: Documentatie en commentaar |
[bewerken] While lus
De eerste lus controle structuur is het while statement. Normaalgezien 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:
a = 0 while a < 10 : a += 1 print a print "Loop finished"
De uitvoer bestaat uit de getallen van 1 tot en met 10, gevolgd door de Loop finished. Dit programma werkt alsvolgt, 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 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. Eens 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 Loop finished. 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 normaalgezien niet de bedoeling is. Een oneindige lus kan er bijvoorbeeld alsvolgt uitzien:
while 1 == 1: print "Help, I'm stuck in a loop."
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 connectie van clients aanvaardt en afhandelt, en hierna accepteert hij een nieuwe connectie.
[bewerken] For lus
Een 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:
onetoten = range(1,11) for a in onetoten: print a print "Loop finished"
De uitvoer is volkomen analoog aan het while-voorbeeld, de getallen van 1 tem 10, gevolgd door de string Loop finished. De code ziet er echter verschillend uit, de eerste regel maakt gebruik van de range(start,einde) functie. Dit genereert een array getallen:
>>> range (1,11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
De start waarde is inclusief, de eindwaarde exclusief. Maar terug naar de lus, de tweede regel maakt gebruik van het for statement, dit ziet er in gebruik alsvolgt 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:
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 daarenegen werd vooraf, zelfs buiten de lus bepaald over welke waarden men in de lus ging itereren. Dus indien men vooraf weet over welke waarden met gaat itereren gebruiken men typisch een for lus (bijvoorbeeld voor elk element in lijst ), wanneer men binnen de lus dient te bepalen of de lus nog een maal uitgevoerd dient te worden gebruikt met een while lus (bijvoorbeeld, zolang de gebruiker niet -1 ingeeft).
| Vorige: Conditionele statements | Index | Volgende: Documentatie en commentaar |