Bereken het subtotaal
Laat subtotal price maal quantity teruggeven.
Een oefensessie bestaat uit werktijd en soms een pauze. Als je later de pauzeregel aanpast, wil je niet tegelijk de berekening van de werktijd veranderen. Kleine functies geven elke afspraak een duidelijke plek.
Bij compositie stel je een grotere bewerking samen uit kleinere functies. Eén functie rekent bijvoorbeeld taken om naar minuten. Een tweede bepaalt hoeveel pauze bij die werktijd hoort en een derde verbindt de stappen.
Een tussenresultaat is het antwoord van een stap dat je in een volgende stap gebruikt. Geef zo'n resultaat een naam die zijn betekenis aangeeft. work is bijvoorbeeld een aantal minuten, terwijl tasks een aantal taken is.
Dat beide waarden gehele getallen zijn, maakt ze nog niet onderling uitwisselbaar. De volgende functie rekent volgens de betekenis van haar parameter. De verbindende functie moet dus het juiste tussenresultaat aanleveren.
In dit zelfstandige voorbeeld duurt iedere taak zes minuten. Vanaf twintig minuten werktijd komt er vijf minuten pauze bij. Druk op Voorbeeld uitvoeren en vergelijk een sessie van drie met een sessie van vier taken.
def work_minutes(tasks):
return tasks * 6
def break_minutes(work):
if work >= 20:
return 5
return 0
def session(tasks):
work = work_minutes(tasks)
rest = break_minutes(work)
return work, rest, work + rest
print(session(3))
print(session(4))(18, 0, 18) (24, 5, 29)
De hoofdtaak session leest als een korte route: bereken werktijd, bepaal pauze, geef een overzicht terug. De helpers voeren ieder hun eigen afspraak uit. De tuple houdt werktijd, pauze en totaal in die volgorde bij elkaar.
| Stap | Drie taken | Vier taken |
|---|---|---|
| Werkminuten | 18 | 24 |
| Pauze over die werkminuten | 0 | 5 |
| Totaal | 18 | 29 |
De pauzefunctie hoeft niet te weten hoeveel taken er oorspronkelijk waren. Zij ontvangt al de berekende werktijd. Daardoor kun je haar afspraak apart lezen en controleren zonder de rest van het programma na te lopen.
Ook de volgorde van regels in session helpt bij het begrijpen. Eerst ontstaat work, daarna wordt die waarde aan break_minutes gegeven. Pas als beide onderdelen bekend zijn, wordt het totale aantal minuten berekend.
Een helper kan op zichzelf goed werken terwijl de combinatie fout is. Deze zelfstandige variant stuurt het aantal taken naar een functie die werkminuten verwacht. Voorspel het verschil bij vier taken.
def work_minutes(tasks):
return tasks * 6
def break_minutes(work):
if work >= 20:
return 5
return 0
def session(tasks):
work = work_minutes(tasks)
rest = break_minutes(tasks)
return work, rest, work + rest
print(session(4))(24, 0, 24)
De werktijd is nog steeds vierentwintig minuten, maar de pauze ontbreekt. De pauzefunctie heeft het getal vier ontvangen en vergelijkt dat met twintig. De losse helper volgt haar eigen regel correct; de verbindende functie heeft haar de verkeerde betekenis aangeleverd.
Herstel de aanroep zodat de berekende werktijd wordt meegegeven. Een grensgeval helpt om deze fout zichtbaar te maken: drie taken leveren bij beide varianten geen pauze op, maar vier taken wel. Test daarom ook waar de ene stap een beslissing in de volgende stap verandert.
De opdracht gebruikt een fictieve bestelling met gehele oefenbedragen. Houd drie betekenissen uit elkaar: het subtotaal vóór korting, het kortingsbedrag zelf en het nettobedrag na korting. De bezorgfunctie moet het nettobedrag ontvangen.
Een korting kan een bestelling onder de grens voor gratis bezorgen brengen. Daarom moet je die korting eerst verwerken en pas daarna de bezorgkosten bepalen. Alleen de uitkomsten van de losse helpers controleren zou zo'n fout in hun samenwerking kunnen missen.
Gebruik duidelijke namen voor de tussenresultaten en laat iedere helper haar afgesproken antwoord teruggeven. De laatste functie bouwt de overzichtstuple. Je hoeft de regels uit de helpers niet opnieuw in die laatste functie over te schrijven.
Laat subtotal price maal quantity teruggeven.
Laat discount vier teruggeven bij lidmaatschap én total >= 20, anders nul.
Laat delivery nul teruggeven vanaf net vijfentwintig, anders vijf.
Laat checkout bezorgkosten over net berekenen en net, fee en net + fee teruggeven.
Je kunt nu berekeningen hergebruiken en samenstellen. In de volgende module leer je meerdere gegevens bewaren en bewerken met collecties.
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.