Stap 3: Het hele lied (for-loop met range)
Deze stap gebruikt een for-loop die aftelt, uit Range met stappen.
Je couplet werkt voor elk aantal flessen. Nu moet flessen alleen nog zelf
aftellen: 10, 9, 8, … tot en met 1. Dat doet range met een negatieve stap:
for flessen in range(10, 0, -1):
print(flessen)
range(10, 0, -1) begint bij 10, telt telkens 1 af en stopt vóór de 0.
Opdracht: tien coupletten
Plak je programma uit stap 2 in het veld. Ben je het kwijt, neem dan de oplossing van stap 2.
Laat Python met een loop het hele lied printen, van 10 flessen tot en met 1, met een lege regel na elk couplet. Het begin van de verwachte uitvoer:
10 groene flessen staan aan de muur,
10 groene flessen staan aan de muur,
en als er één groene fles valt,
dan staan er 9 groene flessen aan de muur.
9 groene flessen staan aan de muur,
9 groene flessen staan aan de muur,
en als er één groene fles valt,
dan staan er 8 groene flessen aan de muur.
# Plak hier je programma uit stap 2
Klik hier voor een tip.
Het couplet gaat in de loop: wat ingesprongen staat, gebeurt elke ronde.
De regel die flessen op 10 zet, heb je dan niet meer nodig, want de loop
geeft flessen elke ronde zelf een waarde. Vergeet de lege regel na elk
couplet niet.
Klik hier voor de oplossing.
for flessen in range(10, 0, -1):
print(f"{flessen} groene flessen staan aan de muur,")
print(f"{flessen} groene flessen staan aan de muur,")
print("en als er één groene fles valt,")
print(f"dan staan er {flessen - 1} groene flessen aan de muur.")
print()
Tien coupletten, met zes regels code.
Onderzoek
Lees de laatste twee coupletten van je uitvoer hardop. Klinkt dat goed?
Wat klopt er niet?
Onderaan de uitvoer staan de laatste twee coupletten zo:
2 groene flessen staan aan de muur,
2 groene flessen staan aan de muur,
en als er één groene fles valt,
dan staan er 1 groene flessen aan de muur.
1 groene flessen staan aan de muur,
1 groene flessen staan aan de muur,
en als er één groene fles valt,
dan staan er 0 groene flessen aan de muur.
Het zijn er twee: bij één fles zeg je "1 groene fles staat", niet "1 groene flessen staan", en aan het eind staan er "geen groene flessen meer". Python weet dat niet; dat moet jij hem vertellen. Dat doe je in de volgende stap.
Er gaat iets mis
for flessen in range(10, 0):
print(flessen)
print("klaar")
Uitvoer:
klaar
Oorzaak: zonder stap telt range op, met stappen van 1. Van 10 optellen
tot vóór 0 levert geen enkel getal op, dus de loop draait nul keer. Er komt
geen foutmelding: Python vindt een lege loop prima.
Oplossing: geef de stap mee, range(10, 0, -1).
Kopieer je programma voordat je verdergaat: de editor bewaart het niet.
Door naar stap 4: één fles is anders.