02: Functies

We hebben al kennis gemaakt met een functie, namelijk print(), een functie die iets afdrukt. Om een functie te laten werken gebruik je zijn naam, gevolgd door een aantal argumenten die tussen haakjes staan (). Het woord argument betekent eigenlijk invoer voor de functie. Daarna doet de functie iets waarbij de argumenten een rol spelen. Wanneer er meerdere argumenten zijn worden ze gescheiden door komma's (,). Je kunt bijvoorbeeld meerdere argumenten geven aan print; het zal al de argumenten, met spaties ertussen, in die volgorde afdrukken. We zullen dat laten zien in het voorbeeld hier beneden.

Voorbeeld
Druk drie getallen af
De extra spaties in het programma hierboven hebben geen effect op de uitvoer. Extra spaties hebben ook geen betekenis in de meeste andere situaties. Al hoewel je moet voorzichtig zijn met extra spaties aan het begin van een regel, inspringen genaamd. Dit heeft een speciale betekenis en kan fouten veroorzaken (klik hier voor een voorbeeld) wanneer het niet correct wordt gebruikt. Over een paar lessen zul je voorbeelden zien van correct inspringen.

Een functie kan ook een een waarde teruggeven (zoals bij uitvoer). Zo zal de functie max() (afkorting van maximum) de grootste waarde teruggeven van al de argumenten, waarbij het nodig is dat het getallen zijn.

Voorbeeld
Probeer de uitvoer van het volgende programma te voorspellen, voor dat je het uitvoert.
Met return value wordt de waarde bedoelt die de functie teruggeeft. Zo zeggen we bijvoorbeeld bij max(42, 17) dat "de functie max de waarde 42 teruggeeft."

De max functie heeft een tegenhanger: de min functie, die geeft het minimum (kleinste) van al zijn argumenten.

Meerkeuze Opgave: Min en Max I
Wat is de uitvoer van het volgende programma?

x = 13
y = 7
a = max(x+y, x*2)
b = min(x, y)
print(a,b)
Correct!

Functies kunnen worden gecombineerd tot meer complexe uitdrukkingen.

Kort antwoord opgave: Min and Max II
Wat is de uitvoer van het volgende programma?Hint

x = min(max(13, 7), 9)
print(x)
Correct!

Je hoeft je niet te beperken tot het gebruik van functies die in Python vooraf gedefinieerd zijn. Over een paar lessen zul je leren hoe je nieuwe functies kunt definiëren!

Veel voorkomende fouten

Wanneer je een functie aanroept met te weinig argumenten (invoer) of teveel argumenten dan krijg je een foutmelding. Bijvoorbeeld, max vereist tenminste één invoer:

Voorbeeld
Aanroepen van max met te weinig argumenten.

Het is belangrijk om zorgvuldig de foutmeldingen te lezen, wanneer je programma niet werkt. Python zal doorgaans bruikbare feedback geven over wat er mis ging. Al hoewel, soms moet je wat verder kijken om het probleem te analyseren. Hier volgt een voorbeeld.

Voorbeeld
Druk op Uitvoeren en kijk naar de fout die optreedt.

Python zegt dat er een syntax error optreedt, wat zoveel betekent als: ik begrijp niet wat je bedoelt.

 Traceback (most recent call last):
   In line 2 of the code you submitted:
     bigger = max(3, 4)
          ^
 SyntaxError: invalid syntax
Al hoewel, de regel bigger = max(3, 4) juist is. Het probleem komt echter voort uit de vorige regel: we hebben daar het sluithaakje ) vergeten na smaller = min(14, 99 en Python begon op de volgende regel te zoeken naar ). Dus, kijk ook voor en na de regel die Python noemt, wanneer je vast komt te zitten bij het debuggen van je programma.

Oefening

Dit is een tweedelige oefening waarin gebruik gemaakt wordt van de min en max functies. Er zijn verbindingen tussen de steden Maxime en Miniac door middel van meerdere bruggen. Over elke brug kan een begrensde hoeveelheid lading getransporteerd worden.

Programmeeroefening: Eén weg
Voor deel 1 is er één enkele weg tussen de twee steden. De weg kent drie bruggen met maximale belasting a, b, c, zoals in de tekening beneden te zien is:

Om de route te kunnen volgen moet je truck eerst over de brug met maximale belasting a, dan over de brug met maximale belasting b, en dan over de brug met maximale belasting c. Je truck zal verongelukken wanneer ook maar één van de drie maximale belastingen wordt overschreden. Schrijf een programma dat de maximale vracht afdrukt die met je truck in één keer kan worden getransporteerd. Je programma mag ervan uitgaan dat de variabelen a, b, en c reeds de maximale mogelijke belasting per brug bevatten.

Programmeeroefening: Twee wegen
Deel 2: Nu gaan we het hele verhaal vertellen. Er is ook een tweede route die uit twee bruggen bestaat, de eerste met maximale belasting d, en de tweede met maximale belasting e, zoals je kunt zien in de tekening beneden.

Je kunt met je truck één van beide routes kiezen. Schrijf een programma dat dat de maximale vracht afdrukt die met je truck in één keer kan worden getransporteerd . Je programma mag ervan uitgaan dat de variabelen a, b, c, d, en e reeds de maximale mogelijke belasting per brug bevatten. Hint

Oefening: Drag en drop

Hier volgt een drag and drop oefening waarbij de regels in een correcte volgorde versleept dienen te worden.

Scramble Opgave: (drag and drop) Sorteer
Zet de regels van het programma zodanig dat de waarden voor x, y en z zo worden afgedrukt, dat de kleinste eerst wordt afgedrukt, dan de middelste en tenslotte de grootste.
Versleep de regels met je muis.
  • print(max(x, y, z))
  • print(min(x, y, z))
  • print(x+y+z-min(x, y, z)-max(x, y, z))

Wanneer je de oefeningen hierboven af hebt, heb je twee keuzes

  • Je kunt onmiddellijk naar Les 3, of
  • je kunt een paar extra oefeningen doen over functies in Les 2X.