Ga naar hoofdinhoud

Stap 3: Het hele lied (for-loop met range)

info

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​

Zet je couplet uit stap 2 in de loop, zodat Python het hele lied print, met een lege regel na elk couplet. De regel flessen = 10 heb je dan niet meer nodig: de loop geeft flessen elke ronde zelf een waarde.

for flessen in range(10, 0, -1):
    # zet hier je couplet
    print()
Klik hier voor een tip.

Kopieer de vier print-regels uit stap 2 in de loop, boven print(), en laat ze vier spaties inspringen. Dan horen ze bij de loop.

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).

Door naar stap 4: één fles is anders.