← Python/Denken in functies
Les 5 van 8
MODULE 03 · 05◷ 24 min

Geef samenhangende waarden samen terug

Na deze les kun je
  • Een tuple als retourwaarde maken
  • Waarden in een afgesproken volgorde teruggeven
  • Een tuple uitpakken en verder gebruiken

Je verdeelt een stapel papier over pakken van twintig vellen. Daarna wil je zowel het aantal volle pakken als het aantal losse vellen weten. Die twee antwoorden horen bij dezelfde berekening en kunnen samen terug uit één functie.

Eén antwoord met meerdere onderdelen

Een tuple bundelt waarden in een vaste volgorde. Met return packs, loose maakt de komma zo'n bundel van het aantal pakken en de rest. De functie geeft die ene tuple aan de aanroeper terug.

Wanneer je de tuple zelf afdrukt, zie je bijvoorbeeld (2, 7). De haakjes maken zichtbaar welke waarden samen horen. Binnen deze afspraak staat het eerste getal voor pakken en het tweede voor losse vellen.

Die volgorde moet je bewust kiezen en bij iedere aanroep aanhouden. De aanroeper kan niet aan het getal zeven zien welke betekenis jij bedoelt. Duidelijke namen in de code helpen jou en de volgende lezer om de afspraak te volgen.

Een bundel uitpakken

Bij uitpakken verdeel je de waarden over losse namen. Met packs, loose = split_sheets(47) krijgt packs de eerste waarde en loose de tweede. Daarna kun je beide namen apart gebruiken.

Voorspel hoeveel volle pakken en losse vellen je bij zevenenveertig vellen krijgt. Druk op Voorbeeld uitvoeren en vergelijk de losse uitvoerregels met het bericht eronder.

Volle pakken en losse vellen
def split_sheets(total):
    packs = total // 20
    loose = total % 20
    return packs, loose

packs, loose = split_sheets(47)
print(packs)
print(loose)
print(f"{packs} pakken, {loose} losse vellen")
print(split_sheets(40))
Verwachte uitvoer
2
7
2 pakken, 7 losse vellen
(2, 0)

De functie gebruikt de bekende gehele deling // voor het aantal volle pakken. De restoperator % berekent hoeveel vellen daarna overblijven. Een andere invoer vraagt alleen een nieuwe aanroep; beide uitkomsten worden opnieuw samen berekend.

TotaalHele pakken van twintigLosse vellenTuple
4727(2, 7)
4020(2, 0)
000(0, 0)

De laatste aanroep in het voorbeeld print de tuple voor veertig direct. Dat is dezelfde soort bundel als bij de eerste aanroep. Uitpakken verandert de berekening niet; het geeft de onderdelen handige namen voor verder gebruik.

Veelgemaakte fout: de afspraak omdraaien

Python controleert niet of jouw naam packs werkelijk pakken betekent. Als de functie de onderdelen in de verkeerde volgorde teruggeeft, worden ze nog steeds van links naar rechts uitgepakt. Deze zelfstandige foutvariant toont hoe gemakkelijk daardoor een geloofwaardig maar onjuist bericht ontstaat.

De return-volgorde omdraaien
def split_sheets(total):
    packs = total // 20
    loose = total % 20
    return loose, packs

packs, loose = split_sheets(47)
print(f"{packs} pakken, {loose} losse vellen")
Verwachte uitvoer
7 pakken, 2 losse vellen

De rekenregels in de functie kloppen afzonderlijk. Toch komt er zeven pakken en twee losse vellen uit het bericht, omdat de return eerst de rest en daarna de pakken teruggeeft. De namen aan de linkerkant van de aanroep volgen nog de oorspronkelijke afspraak.

Herstel daarom de volgorde bij het teruggeven. Namen op allerlei gebruiksplekken omwisselen zou de afspraak onnodig moeilijk maken. Controleer bij het lezen steeds de combinatie: volgorde bij return en volgorde bij uitpakken.

Gebruik de onderdelen opnieuw

Het aantal namen bij uitpakken moet bij het aantal waarden passen. Deze opdrachten gebruiken steeds twee waarden, dus zet aan beide kanten een afspraak met twee onderdelen neer. Later leer je uitgebreidere manieren om verzamelingen uit te pakken.

De oefeningen rekenen met uren en minuten en met een kleinste en grootste waarde. Een volgende functie mag de eerste helper aanroepen en diens tuple gebruiken of direct teruggeven. Bereken bij een gewijzigd totaal eerst dat nieuwe totaal, zodat grensovergangen vanzelf in dezelfde omzetting terechtkomen.

In deze oefeningen zijn de eindtotalen in minuten steeds nul of hoger. Je hoeft negatieve tijdtotalen hier nog niet te behandelen.

AAN DE SLAG 0/4
1

Maak een tuple in de juiste volgorde

Laat split_minutes eerst uren en dan resterende minuten teruggeven.

2

Spreek de volgorde af

Laat bounds altijd de kleinste waarde als eerste teruggeven.

3

Pak de twee waarden uit

Maak in describe tekst zoals 2u 5m met de uitgepakte waarden.

4

Gebruik het nieuwe totaal

Laat shift de tuple voor total + extra teruggeven.

Wat je meeneemt

  • Een komma bundelt retourwaarden in een tuple met een afgesproken volgorde.
  • Bij uitpakken krijgen namen de onderdelen van links naar rechts.
  • Een helper die een tuple teruggeeft kun je in andere functies blijven hergebruiken.

Hierna leg je vast welke invoer een functie accepteert en hoe ze ongeldige waarden meldt.

main.py
UitvoerPython
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.