Ga naar hoofdinhoud

Stap 6: Een functie die tekst teruggeeft (return)

info

Deze stap gebruikt return, uit Return.

In je couplet staan nu twee variabelen, met daaronder drie regels if en elif. Kijk wat die regels doen: ze zoeken de goede woorden bij een aantal flessen. "3 groene flessen", "1 groene fles", "geen groene flessen meer". Dat kan een functie doen die de tekst teruggeeft in plaats van hem te printen:

def staan(flessen):
if flessen == 1:
return "staat"
else:
return "staan"

print(staan(1)) # staat
print(staan(4)) # staan

Een functie met return kun je gebruiken waar je anders een stukje tekst zou schrijven, ook tussen de accolades van een f-string.

Opdracht: aantal(flessen)​

staan en het couplet staan al klaar. Schrijf de functie aantal, die voor elk aantal flessen de goede woorden teruggeeft:

aantal(3)aantal(1)aantal(0)
"3 groene flessen""1 groene fles""geen groene flessen meer"

Nu geeft hij altijd de gewone vorm terug, dus de laatste twee coupletten kloppen nog niet.

def aantal(flessen):
    return f"{flessen} groene flessen"


def staan(flessen):
    if flessen == 1:
        return "staat"
    else:
        return "staan"


def couplet(flessen):
    print(f"{aantal(flessen)} {staan(flessen)} aan de muur,")
    print(f"{aantal(flessen)} {staan(flessen)} aan de muur,")
    print("en als er één groene fles valt,")
    print(f"dan {staan(flessen - 1)} er {aantal(flessen - 1)} aan de muur.")


for flessen in range(3, 0, -1):
    couplet(flessen)
    print()
Klik hier voor een tip.

Er zijn drie gevallen: 0, 1 en al het andere. Schrijf ze als if, elif en else, met in elk geval een eigen return.

Klik hier voor de oplossing.
def aantal(flessen):
if flessen == 0:
return "geen groene flessen meer"
elif flessen == 1:
return "1 groene fles"
else:
return f"{flessen} groene flessen"


def staan(flessen):
if flessen == 1:
return "staat"
else:
return "staan"


def couplet(flessen):
print(f"{aantal(flessen)} {staan(flessen)} aan de muur,")
print(f"{aantal(flessen)} {staan(flessen)} aan de muur,")
print("en als er één groene fles valt,")
print(f"dan {staan(flessen - 1)} er {aantal(flessen - 1)} 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.

Het couplet is nu vier regels zonder één if. Alles wat met enkelvoud en meervoud te maken heeft, zit in aantal en staan.

Door naar stap 7: het hele lied als functie.