Werk herhalen met lussen · oefening
Bouw een resultaat op
In de vorige twee oefeningen verzamelde je de waarden van een range in een lijst. Soms heb je één antwoord nodig dat van alle waarden afhangt, zoals de totale prijs van meerdere items.
Daarvoor heb je een variabele nodig die van de ene ronde naar de volgende blijft bestaan.
Begin erbuiten, verander erbinnen, gebruik erna
Stel dat je het totaal van een lijst met prijzen wilt berekenen:
Drie regels, drie taken:
total = 0wordt vóór de lus uitgevoerd. Die regel maakt de variabele en geeft haar een beginwaarde.total = total + pricewordt binnen de lus uitgevoerd, één keer per waarde. Die neemt het huidige totaal en vervangt het door een groter totaal.print(total)wordt na de lus uitgevoerd, wanneer elke waarde is opgeteld.
Dat patroon heeft een naam. De variabele heet een accumulator en dit is het accumulatorpatroon. De lus houdt één resultaat bij waaraan elke waarde bijdraagt.
Volg total door de rondes: het begint bij 0 en bevat daarna 4, dan 13 en dan 28. Het per ronde zien oplopen maakt het patroon duidelijker dan er alleen over lezen. De oefening aan het einde van deze les is een goede plek om dat te doen met Step.
Deze vier panelen tonen de accumulator vóór de lus en na elke optelling. Before loop betekent vóór de lus; pass betekent ronde:

Waarom de beginwaarde belangrijk is
Zet total = 0 op de verkeerde plek en de lus zet het totaal elke ronde terug:
Het antwoord is 15, de laatste prijs, omdat het totaal vóór elke optelling werd weggegooid. Als een accumulator uiteindelijk alleen de laatste waarde bevat, controleer dan of je hem per ongeluk binnen de lus hebt ingesteld.
De regel helemaal weglaten geeft bij de eerste ronde een NameError, omdat total + price een al bestaande total nodig heeft.
Wat drukt deze code af?
values = [2, 5, 3]
total = 0
for value in values:
total = total + value
print(total)Waar hoort de beginwaarde van een accumulator?
Zodra de lange vorm duidelijk is
Python heeft een kortere schrijfwijze voor het bijwerken:
total += price
Voor deze getallen betekent die hetzelfde als total = total + price: neem het huidige totaal, tel de huidige prijs erbij op en sla de nieuwe waarde weer op in total. De lange vorm is prettig terwijl je het patroon volgt. De korte vorm is handig zodra je kunt uitleggen wat die vervangt.
Bereken nu zelf een totaal. Eén accumulator is genoeg voor een eerste kennismaking; die heeft al veel te onthouden.
Opdracht
De lijst donations staat al klaar. Gebruik één lus om elke donatie bij total op te tellen en behoud de overzichtsregel na de lus.
Verwachte uitvoer:
Total: 142
Stel total vóór de lus in. Je kunt de wijziging schrijven als total = total + donation of, zodra dat duidelijk voelt, als total += donation.
Kijk hoe de accumulator groeit
Klik op Step in de werkbalk van de editor zodra het programma werkt en loop er met Next doorheen. Bekijk het variabelenpaneel.
Kijk hoe total stijgt van 0 naar 12, dan naar 57 en uiteindelijk naar 142. De nuttige vraag bij elke ronde is: ‘Wat bevatte total vóór deze donatie en wat bevat het nu?’