Werk herhalen met lussen · oefening
Loop over een lijst
Een lus lezen is één ding. Door er zelf een te schrijven, maak je haar je eigen. In deze les schrijf je de lus en bekijk je wat er bij elke ronde gebeurt.
Kijk hoe de lusvariabele verandert
De lusvariabele is een gewone variabele. Het bijzondere is dat Python er vóór elke ronde door het blok een nieuwe waarde aan toewijst.
Voer dit uit en volg size door de rondes. In de eerste ronde bevat de variabele 8. Python bereikt het einde van het blok, springt terug naar de for-regel en size wordt 12. Daarna 16. Na de laatste waarde is er niets meer door te geven en verlaat Python de lus om eronder verder te gaan.
Dat opnieuw toewijzen is makkelijk te beschrijven en nog duidelijker om te zien. Dat ga je doen in de oefening aan het einde van deze les, met de knop Step in de editor.
Een blok kan meerdere regels bevatten
Alles wat onder de for-regel inspringt, wordt elke ronde op volgorde uitgevoerd:
Zes regels uit de lus en daarna één regel eronder. Let erop dat de twee ingesprongen regels een groep blijven en de laatste regel apart staat.
De lusvariabele bevat één item, niet de lijst
Een veelvoorkomende verwarring is die tussen de lijst en het huidige item. De lijst is de hele verzameling. Bij elke ronde wordt de lusvariabele gekoppeld aan één item daaruit. Python maakt voor de lus geen afzonderlijke kopie van dat item:
price is bij elke ronde één getal. prices blijft de hele lijst, vóór en na de lus.
Drie fouten om nu alvast te leren kennen
Je zult elk van deze fouten een keer maken. Als je ze hier ziet, herken je ze later makkelijker.
Een ontbrekende dubbele punt. Python stopt met een SyntaxError en wijst naar het einde van de for-regel:
for guest in guests
print(guest)
Niet inspringen. Python verwacht na de dubbele punt een ingesprongen blok en meldt een IndentationError:
for guest in guests:
print(guest)
De verkeerde naam doorlopen. Deze fout laat het programma niet vastlopen en is daardoor minder opvallend. Een lus over één string loopt door de tekens in plaats van door de lijst die je bedoelde:
Als je lus losse tekens oplevert terwijl je hele items verwachtte, controleer dan of je de naam in het enkelvoud schreef waar je het meervoud bedoelde.
Wat drukt deze code af?
notes = ["do", "re", "mi"]
for note in notes:
print(note.upper())
print("end")Nadat een for-lus klaar is, houdt de lusvariabele de laatste waarde die ze kreeg. Python wist de naam niet automatisch.
Een lege lijst levert helemaal geen waarde. In dat geval maakt de lus geen lusvariabele en verandert ze een bestaande variabele met die naam niet.
Wat is de waarde van bird nadat deze lus klaar is?
birds = ["robin", "swift", "wren"]
for bird in birds:
print(bird)
Schrijf nu zelf een lus.
Opdracht
De lijst plants staat al voor je klaar. Maak het programma af, zodat het:
een
for-lus gebruikt metplantals lusvariabele;één regel per plant afdrukt in de vorm
Water the fern., met de plantnaam op de plek vanfernen een punt aan het einde;de laatste overzichtsregel behoudt, die één keer na de lus wordt uitgevoerd.
Verwachte uitvoer:
Water the fern.
Water the basil.
Water the aloe.
Water the ivy.
Plants to water: 4
Voeg een vijfde plant toe aan de lijst en voer het programma opnieuw uit. De lus moet die zonder andere wijziging verwerken. Verwijder die plant voordat je instuurt.
Kijk hoe de lusvariabele verandert
Klik op Step in de werkbalk van de editor zodra je lus werkt en ga met Next regel voor regel verder. Bekijk plant in het variabelenpaneel.
Je ziet de markering door het lusblok naar beneden gaan, terugspringen naar de for-regel en plant de volgende waarde krijgen: fern, daarna basil, dan aloe en dan ivy. Die sprong terug is de lus. Het is de moeite waard om dat met je eigen code te zien.