Sommeer de hele reeks
Toon op regel 1 de som van één tot en met count. Neem count zelf mee.
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.
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.
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.
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)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.
| Gewicht | Som tot nu toe | Aantal zwaar | Laatste zwaar |
|---|---|---|---|
| 2 | 2 | 0 | 0 |
| 4 | 6 | 1 | 4 |
| 6 | 12 | 2 | 6 |
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.
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.
for number in range(1, 4):
total = 0
total += number
print(total)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?
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.
Je programma krijgt deze invoer automatisch. Elke variant begint opnieuw. Alle varianten moeten kloppen.
0
1
4
6
Toon op regel 1 de som van één tot en met count. Neem count zelf mee.
Toon op regel 2 hoeveel getallen in de reeks deelbaar zijn door drie.
Toon op regel 3 het laatste oneven getal, of nul bij een lege reeks.
Toon op regel 4 total / count, maar kies 0.0 wanneer count nul is.
Hierna onderzoek je hoe een zoeklus kan laten zien dat geen enkele kandidaat voldeed.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.