Stap 5: Een functie voor één couplet (def en parameters)
Deze stap gebruikt functies met een parameter, uit Functies en Parameters.
Je loop doet nu twee dingen tegelijk: hij telt af, en hij weet hoe een couplet eruitziet. Dat tweede kan in een eigen functie. Dan zegt de loop alleen nog: zing het couplet van 3, dan van 2, dan van 1.
def couplet(flessen):
print(f"Hier komt het couplet van {flessen}.")
for flessen in range(3, 0, -1):
couplet(flessen)
Uitvoer:
Hier komt het couplet van 3.
Hier komt het couplet van 2.
Hier komt het couplet van 1.
Opdracht: couplet(flessen)
Plak je programma uit stap 4 in het veld. Ben je het kwijt, neem dan de oplossing van stap 4.
Maak een functie couplet(flessen) die één couplet print. De loop roept
daarna alleen nog die functie aan en print de lege regel. De uitvoer blijft
precies hetzelfde als in stap 4.
# Plak hier je programma uit stap 4
Klik hier voor een tip.
Welke regels in je loop horen bij één couplet, en welke bij het aftellen?
Die eerste groep verhuist naar de functie. Alles in de functie springt in
onder def. De functie moet boven de loop staan, want Python moet hem
kennen voordat de loop hem aanroept.
Klik hier voor de oplossing.
def couplet(flessen):
nu = f"{flessen} groene flessen staan"
straks = f"staan er {flessen - 1} groene flessen"
if flessen == 1:
nu = "1 groene fles staat"
if flessen - 1 == 1:
straks = "staat er 1 groene fles"
elif flessen - 1 == 0:
straks = "staan er geen groene flessen meer"
print(f"{nu} aan de muur,")
print(f"{nu} aan de muur,")
print("en als er één groene fles valt,")
print(f"dan {straks} aan de muur.")
for flessen in range(3, 0, -1):
couplet(flessen)
print()
Uitvoer:
3 groene flessen staan aan de muur,
3 groene flessen staan aan de muur,
en als er één groene fles valt,
dan staan er 2 groene flessen aan de muur.
2 groene flessen staan aan de muur,
2 groene flessen staan aan de muur,
en als er één groene fles valt,
dan staat er 1 groene fles aan de muur.
1 groene fles staat aan de muur,
1 groene fles staat aan de muur,
en als er één groene fles valt,
dan staan er geen groene flessen meer aan de muur.
De uitvoer is precies die van stap 4. Aan wat het programma doet, is niets
veranderd; alleen de code is anders verdeeld. Nu kun je ook los
couplet(7) schrijven en krijg je alleen dat ene couplet.
Er gaat iets mis
couplet(3)
def couplet(flessen):
print(f"Couplet {flessen}")
NameError: name 'couplet' is not defined. Did you mean: 'complex'?
Oorzaak: Python leest je programma van boven naar beneden. Op de eerste
regel bestaat couplet nog niet: de def komt pas daarna. Python raadt
erbij welke bekende naam je misschien bedoelde, maar hier zit hij ernaast:
complex heeft niets met je lied te maken.
Oplossing: zet de def bovenaan, en de aanroepen eronder.
Kopieer je programma voordat je verdergaat: de editor bewaart het niet.
Door naar stap 6: een functie die tekst teruggeeft.