Maak een tuple in de juiste volgorde
Laat split_minutes eerst uren en dan resterende minuten teruggeven.
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.
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.
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.
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))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.
| Totaal | Hele pakken van twintig | Losse vellen | Tuple |
|---|---|---|---|
| 47 | 2 | 7 | (2, 7) |
| 40 | 2 | 0 | (2, 0) |
| 0 | 0 | 0 | (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.
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.
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")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.
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.
Laat split_minutes eerst uren en dan resterende minuten teruggeven.
Laat bounds altijd de kleinste waarde als eerste teruggeven.
Maak in describe tekst zoals 2u 5m met de uitgepakte waarden.
Laat shift de tuple voor total + extra teruggeven.
Hierna leg je vast welke invoer een functie accepteert en hoe ze ongeldige waarden meldt.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.