Maak voortgang naar de grens
Herhaal zolang level < 10 en verhoog iedere ronde met drie. Toon de eindstand op regel 1.
Een eenvoudige timer telt af tot er geen tijd meer over is. Je wilt niet vooraf alle aftelregels uitschrijven: de huidige stand moet bepalen of er nog een ronde nodig is. Daarvoor gebruik je een while-lus, waarbij je zelf zorgt dat de stand verandert.
Een while-lus herhaalt zijn blok zolang de voorwaarde waar is. Python controleert die voorwaarde vóór iedere ronde, dus ook vóór de eerste. Is het antwoord meteen onwaar, dan voert Python het blok geen enkele keer uit.
Bij een for-lus met range krijgt de lusvariabele automatisch de volgende waarde. Bij while schrijf je de voortgang zelf: een wijziging waardoor de voorwaarde uiteindelijk onwaar kan worden. Zonder zo'n wijziging kan de lus steeds met dezelfde stand blijven beginnen.
Een teller houdt bij hoeveel rondes echt zijn uitgevoerd. Begin die vóór de lus op nul en verhoog hem binnen het blok met één. De teller beschrijft iets anders dan de stand waarop je voorwaarde controleert.
Deze timer is een rekenmodel: er wordt niet echt gewacht tussen de rondes. Hij begint op zeven en vermindert de stand telkens met twee.
remaining = 7
ticks = 0
while remaining > 0:
remaining -= 2
ticks += 1
print(remaining)
print(f"Rondes: {ticks}")5 3 1 -1 Rondes: 4
Met remaining -= 2 trek je twee van de huidige stand af. Dit betekent hier hetzelfde als remaining = remaining - 2. De print volgt op die wijziging en toont dus de stand ná de ronde, niet de stand waarmee je begon.
| Stand vóór controle | Voorwaarde waar? | Stand na de ronde |
|---|---|---|
| 7 | Ja | 5 |
| 5 | Ja | 3 |
| 3 | Ja | 1 |
| 1 | Ja | -1 |
| -1 | Nee | Geen nieuwe ronde |
De laatste stap gaat voorbij nul. Dat mag bij deze gekozen regel: Python controleert vóór een hele stap en maakt de stap niet vanzelf kleiner. Er zijn vier rondes uitgevoerd, ook al liggen zeven en nul geen vier eenheden uit elkaar.
Denk bij een while-lus steeds aan drie dingen: de beginstand, de voorwaarde en de wijziging per ronde. Controleer daarna wat er gebeurt als de beginstand al klaar is. Een correcte lus moet dan vaak helemaal niets doen.
Een vergelijking met >= neemt nul mee, terwijl > dat niet doet. In dit foutvoorbeeld staat de timer al op nul, maar wordt hij toch nog één keer verlaagd.
remaining = 0
ticks = 0
while remaining >= 0:
remaining -= 1
ticks += 1
print(remaining)
print(ticks)-1 1
De uitvoer toont min één en één uitgevoerde ronde. Dat past niet bij de bedoeling “aftellen zolang er tijd over is”. Met remaining > 0 zou de lus bij deze beginwaarde meteen worden overgeslagen.
Een lus die nooit eindigt is een andere fout. Als de gecontroleerde waarde niet verandert en de voorwaarde waar blijft, kom je niet bij de regels na de lus. Codelab beëindigt zulke uitvoeringen; controleer dan eerst of je voortgang binnen het blok staat.
Je laadt een fictieve meter met stappen van drie tot minstens tien. Houd naast de eindstand ook het aantal rondes en de standen ná iedere verhoging bij. De tests bevatten een beginstand die al klaar is en een situatie waarin de laatste stap de grens passeert.
Je programma krijgt deze invoer automatisch. Elke variant begint opnieuw. Alle varianten moeten kloppen.
0
1
7
10
Herhaal zolang level < 10 en verhoog iedere ronde met drie. Toon de eindstand op regel 1.
Begin turns op nul en tel iedere ronde één op. Toon het aantal op regel 2.
Toon op regel 3 alle meterstanden na iedere verhoging, met spaties ertussen.
Toon op regel 4 hoeveel de eindstand boven tien ligt.
Hierna leer je een lopende herhaling tussentijds stoppen of één ronde overslaan.
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.