← Python/Kiezen en herhalen
Les 7 van 8
MODULE 02 · 07◷ 22 min

Bouw een overzicht met accumulators

Na deze les kun je
  • Meerdere samenvattingen in één lus bijhouden
  • Een voorwaardelijke teller en laatste waarde bepalen
  • Een lege reeks zonder delen door nul afhandelen

Na het verwerken van een reeks wil je vaak een overzicht: hoeveel was het samen, hoeveel waarden pasten bij een regel en wat was de laatste passende waarde? Je kunt die antwoorden tijdens het doorlopen opbouwen. Zo hoef je de gegevens niet telkens opnieuw langs te gaan.

Bewaar wat je tot nu toe weet

Een accumulator bewaart een tussenresultaat dat tijdens de lus wordt bijgewerkt. Een som begint meestal op nul; bij iedere ronde tel je de huidige waarde erbij. De naam blijft bestaan tussen de rondes, zodat de volgende ronde verder kan rekenen met het vorige resultaat.

Een teller is een verwante vorm, maar telt gebeurtenissen in plaats van waarden. Met total += weight voeg je een gewicht toe aan een som. Met count += 1 noteer je dat je één extra item hebt verwerkt.

Je kunt ook een laatste passende waarde onthouden. Geef die naam alleen een nieuwe waarde wanneer de huidige waarde aan de voorwaarde voldoet. Na de lus staat er dan de meest recent gevonden waarde, of de afgesproken beginwaarde wanneer er geen match was.

Een overzicht van gewichten

Het voorbeeld verwerkt de gewichten twee, vier en zes. Een gewicht vanaf vier noemen we hier zwaar; naast de totale som bewaren we het aantal zware gewichten en het laatste zware gewicht.

Van drie gewichten naar een overzicht
total = 0
count = 0
heavy = 0
last_heavy = 0
for weight in range(2, 7, 2):
    total += weight
    count += 1
    if weight >= 4:
        heavy += 1
        last_heavy = weight
print(total)
print(heavy)
print(last_heavy)
if count > 0:
    average = total / count
else:
    average = 0.0
print(average)
Verwachte uitvoer
12
2
6
4.0

Volg vooral het verschil tussen optellen en tellen. Het gewicht zes voegt zes toe aan de som, maar slechts één aan het aantal zware items. De laatste passende waarde wordt vervangen, niet bij de vorige opgeteld.

GewichtSom tot nu toeAantal zwaarLaatste zwaar
2200
4614
61226

Omdat deze reeks oploopt, is de laatste zware waarde ook de grootste zware waarde. Dat hoeft bij een willekeurige volgorde niet zo te zijn. De betekenis van je samenvatting hangt dus ook af van de volgorde waarin je waarden verwerkt.

Voor het gemiddelde deel je de totale som door het aantal verwerkte items. Bij nul items kun je niet door dat aantal delen. Het voorbeeld kiest daarom eerst met if/else een geldige berekening of de afgesproken lege uitkomst 0.0.

Begin niet iedere ronde opnieuw

De beginwaarde van een accumulator hoort vóór de lus. Zet je de toekenning binnen het blok, dan vergeet je elke ronde wat je al had verzameld.

De som vergeet de vorige rondes
for number in range(1, 4):
    total = 0
    total += number
print(total)
Verwachte uitvoer
3

Je verwacht de som van één, twee en drie, maar ziet alleen drie. De som wordt aan het begin van elke ronde opnieuw nul, waarna alleen de huidige waarde wordt toegevoegd. Verplaats de beginwaarde vóór de for-lus en druk het eindresultaat pas na de lus af.

Een teller voor een deelgroep hoort juist alleen binnen de passende if te groeien. Anders telt hij ook waarden die niet aan je regel voldoen. Vraag bij iedere bijwerking: beschrijft deze naam alle waarden, een deelgroep of alleen de laatste match?

Nu jij

Maak een overzicht van de getallen één tot en met de ingelezen hoeveelheid. Voor een oneven getal geldt number % 2 != 0: het teken != betekent ongelijk aan. Houd het lege geval apart bij het gemiddelde en laat de andere beginwaarden dan staan.

Testinvoer · 4 varianten

Je programma krijgt deze invoer automatisch. Elke variant begint opnieuw. Alle varianten moeten kloppen.

Lege reeks
0
Alleen één
1
Vier waarden
4
Twee veelvouden van drie
6
AAN DE SLAG 0/4
1

Sommeer de hele reeks

Toon op regel 1 de som van één tot en met count. Neem count zelf mee.

2

Tel de veelvouden

Toon op regel 2 hoeveel getallen in de reeks deelbaar zijn door drie.

3

Bewaar het grootste oneven getal

Toon op regel 3 het laatste oneven getal, of nul bij een lege reeks.

4

Bereken het gemiddelde veilig

Toon op regel 4 total / count, maar kies 0.0 wanneer count nul is.

Dit neem je mee

  • Beginwaarden staan vóór de lus; bijwerkingen gebeuren tijdens de rondes.
  • Een aantal, een som en een laatste waarde beantwoorden andere vragen.
  • Controleer vóór een deling of het aantal nul is.

Hierna onderzoek je hoe een zoeklus kan laten zien dat geen enkele kandidaat voldeed.

main.py
UitvoerPython
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.