pythonzomerschool

Oefenroute · Trede 2: tentamentraining · 20 opdrachten

Extra extra oefening

Twintig nieuwe opgaven met kortingen, lussen en functies. Je krijgt een realistische situatie en duidelijke eisen, maar bijna geen programmeerhints. Zo oefen je alsof je de vraag op een tentamen krijgt.

startWerken zonder uitgebreide hints

  1. Haal zelf de invoer, berekeningen, keuzes en herhalingen uit het verhaal.
  2. Schrijf je programma en probeer eerst minstens één eigen testwaarde.
  3. Open daarna het testpaneel. Bekijk de verwachte uitvoer pas nadat je dezelfde invoer hebt geprobeerd.

Blijf binnen de lesstof: input(), variabelen, rekenen, if / elif / else, for, while, functies en return. Je hebt geen lijsten, dictionaries, imports of foutafhandeling nodig.

Hoe streng vergelijk ik mijn uitvoer?

De inhoud moet kloppen. 27, 27.0 en €27,00 betekenen bij een geldbedrag hetzelfde, tenzij de opdracht een precieze tekst voorschrijft.

Test vooral de grenswaarden: precies €50, precies vijf producten of precies 18 jaar. Daar ontstaan de meeste fouten.

niveau 1Kortingen en keuzes

01Start

Studentenkorting bij de boekhandel

Bereken één aankoop met een kortingsvoorwaarde.

Situatie. Een boekhandel geeft studenten 10% korting als hun aankoop vóór korting minstens €25 kost.

Vraag het aankoopbedrag als float en vraag of de klant student is (j/n). Bereken en toon het te betalen bedrag. Een niet-student en een student onder €25 betalen het oorspronkelijke bedrag.

Aanname: het bedrag is positief en de studentstatus is j of n.

Test je programma 3 testgevallen

Test 1 · KortingBedrag: 30
Student: j

Toon verwachte uitvoer27.0

Test 2 · Onder de grensBedrag: 24.99
Student: j

Toon verwachte uitvoer24.99

Test 3 · Geen studentBedrag: 30
Student: n

Toon verwachte uitvoer30.0
02Start

Kortingscode in de kledingwinkel

Gebruik if, elif en else voor drie uitkomsten.

Situatie. De code ZOMER10 geeft 10% korting en VIP20 geeft 20% korting. Iedere andere code is ongeldig en geeft geen korting.

Vraag het bestelbedrag en de code. Toon het kortingspercentage en het nieuwe bedrag. De codes zijn hoofdlettergevoelig.

Test je programma 3 testgevallen

Test 1 · ZomercodeBedrag: 80
Code: ZOMER10

Toon verwachte uitvoerKorting: 10%
Te betalen: 72.0

Test 2 · VipcodeBedrag: 80
Code: VIP20

Toon verwachte uitvoerKorting: 20%
Te betalen: 64.0

Test 3 · Ongeldige codeBedrag: 80
Code: zomer10

Toon verwachte uitvoerKorting: 0%
Te betalen: 80.0
03Basis

Inschrijving bij de sportclub

Kies precies één tarief op basis van leeftijd en studentstatus.

Situatie. Leden jonger dan 18 betalen €15 per maand. Vanaf 18 jaar betalen studenten €20 en alle andere leden €28.

Vraag de leeftijd en studentstatus. Toon welk tarief geldt. Zorg dat iemand onder 18 nooit ook het studententarief krijgt.

Test je programma 3 testgevallen

Test 1 · JeugdtariefLeeftijd: 16
Student: n

Toon verwachte uitvoer15

Test 2 · StudentLeeftijd: 20
Student: j

Toon verwachte uitvoer20

Test 3 · StandaardLeeftijd: 20
Student: n

Toon verwachte uitvoer28
04Basis

Voordeelverpakking in de supermarkt

Controleer de hoogste kortingsgrens als eerste.

Situatie. Een fles sap kost €2,40. Vanaf 5 flessen geldt 10% korting; vanaf 10 flessen geldt 15% korting.

Vraag het aantal flessen, bepaal één kortingspercentage en toon het totaalbedrag. Gebruik if / elif / else.

Test je programma 3 testgevallen

Test 1 · Geen kortingAantal: 4

Toon verwachte uitvoer9.6

Test 2 · Eerste grensAantal: 5

Toon verwachte uitvoer10.8

Test 3 · Hoogste grensAantal: 10

Toon verwachte uitvoer20.4
05Basis+

Webshop met korting en verzending

Voer twee berekeningen in de juiste volgorde uit.

Situatie. Vanaf €75 krijgt een bestelling 10% korting. Na de korting is verzending gratis als het overgebleven bedrag minstens €50 is; anders kost verzending €4,95.

Vraag het oorspronkelijke bestelbedrag. Toon het bedrag na korting, de verzendkosten en het eindtotaal.

Test je programma 3 testgevallen

Test 1 · Korting en gratis verzendingBedrag: 80

Toon verwachte uitvoerNa korting: 72.0
Verzending: 0
Totaal: 72.0

Test 2 · Alleen gratis verzendingBedrag: 55

Toon verwachte uitvoerNa korting: 55.0
Verzending: 0
Totaal: 55.0

Test 3 · VerzendkostenBedrag: 49

Toon verwachte uitvoerNa korting: 49.0
Verzending: 4.95
Totaal: 53.95

niveau 2Lussen en totalen

Bij deze opdrachten verwerkt je programma meerdere klanten, producten of deelnemers. Bepaal vóór de lus welke tellers en totalen je nodig hebt.

06Basis

Kantine tijdens de open dag

Verwerk een bekend aantal klanten met een for-lus.

Situatie. Klanten met een bestelling van minstens €10 krijgen 10% korting. De kantine wil na afloop de omzet en het aantal klanten met korting weten.

Vraag eerst hoeveel klanten er zijn. Vraag daarna per klant het bedrag vóór korting, toon het te betalen bedrag en werk beide eindtotalen bij.

Test je programma 1 volledige test

Test · Drie klantenAantal klanten: 3
Bedragen: 8, 10, 20

Toon verwachte einduitvoerTotale omzet: 35.0
Klanten met korting: 2
07Basis+

Boekenmarkt zonder gastenlijst

Gebruik een while-lus wanneer het aantal klanten onbekend is.

Situatie. Elk boek kost €4. Een klant die minstens 3 boeken koopt, krijgt 10% korting. De verkoper weet vooraf niet hoeveel klanten komen.

Verwerk klanten totdat op Nog een klant (j/n)? met n wordt geantwoord. Toon per klant het bedrag en na afloop het aantal verkochte boeken en de totale omzet.

Test je programma 1 volledige test

Test · Twee klantenKlant 1: 2 boeken, doorgaan j
Klant 2: 3 boeken, doorgaan n

Toon verwachte einduitvoerBoeken verkocht: 5
Totale omzet: 18.8
08Pittig

Parkeergarage voor elektrische auto’s

Combineer een staffeltarief, korting en dagtotalen.

Situatie. Tot en met 2 uur kost parkeren €2 per uur, van 3 t/m 5 uur €1,50 per uur en vanaf 6 uur €1,25 per uur. Elektrische auto’s krijgen 10% korting op de volledige parkeerprijs.

Vraag het aantal auto’s en verwerk ze met een for-lus. Vraag per auto het aantal hele uren en of de auto elektrisch is. Toon elke prijs en aan het einde de totale omzet.

Aanname: één tarief geldt voor alle uren van dezelfde auto.

Test je programma 1 volledige test

Test · Drie auto’s2 uur, n
4 uur, j
6 uur, n

Toon verwachte uitvoerPrijzen: 4.0, 5.4, 7.5
Totale omzet: 16.9
09Pittig

Sponsorloop voor de schooltuin

Bereken bedragen per deelnemer en controleer een doelbedrag.

Situatie. Iedere loper haalt aantal rondes × sponsorbedrag per ronde op. Bij minstens €50 verhoogt de school dat bedrag met 10%.

Vraag hoeveel lopers meedoen. Vraag per loper de rondes en het sponsorbedrag per ronde. Toon de donatie na de eventuele bonus. Toon na de lus het totaal en hoeveel lopers de bonus kregen.

Test je programma 1 volledige test

Test · Twee lopersLoper 1: 10 rondes × €2
Loper 2: 20 rondes × €3

Toon verwachte einduitvoerDonaties: 20.0 en 66.0
Totaal: 86.0
Bonus gekregen: 1
10Pittig

Laatste ronde bij de bakker

Stop een productlus met een speciale invoerwaarde.

Situatie. Vanaf 17:00 krijgen alle overgebleven producten 25% korting. De bakker voert per product het aantal en de normale stukprijs in. Bij aantal 0 is de invoer klaar.

Vraag eerst het hele uur. Gebruik daarna een while-lus. Vraag bij een positief aantal de stukprijs, bereken de verkoopwaarde en tel het aantal producten en de omzet op. Vraag bij aantal 0 niet meer om een prijs.

Test je programma 2 testreeksen

Test 1 · Na 17:00Uur: 18
2 producten van €3
3 producten van €2
Aantal: 0

Toon verwachte einduitvoerProducten: 5
Omzet: 9.0

Test 2 · Voor 17:00Uur: 16
1 product van €10
Aantal: 0

Toon verwachte einduitvoerProducten: 1
Omzet: 10.0

niveau 3Functies die samenwerken

Test eerst iedere functie apart. Bouw pas daarna het eventuele hoofdprogramma.

11Basis

Algemene kortingsfunctie

Maak één functie die je bij allerlei winkels kunt hergebruiken.

Schrijf prijs_na_korting(prijs, percentage). De functie berekent hoeveel procent van de prijs afgaat en geeft de nieuwe prijs terug. Gebruik in de functie return en geen input().

Aanname: het percentage ligt tussen 0 en 100.

Test je functie 3 functie-aanroepen

Test 1prijs_na_korting(50, 10)

Toon verwachte returnwaarde45.0

Test 2prijs_na_korting(80, 25)

Toon verwachte returnwaarde60.0

Test 3prijs_na_korting(19.95, 0)

Toon verwachte returnwaarde19.95
12Basis+

Ticketprijs voor het museum

Laat een functie één van vier tarieven teruggeven.

Schrijf bereken_ticket(leeftijd, student). Jonger dan 12 kost €5, 12 t/m 17 kost €8, een volwassen student kost €9 en iedere andere volwassene €12.

Test je functie 4 grensgevallen

Test 1bereken_ticket(11, "n")

Toon verwachte returnwaarde5

Test 2bereken_ticket(12, "n")

Toon verwachte returnwaarde8

Test 3bereken_ticket(18, "j")

Toon verwachte returnwaarde9

Test 4bereken_ticket(18, "n")

Toon verwachte returnwaarde12
13Pittig

Bestelling met verzendfuncties

Laat twee functies ieder één duidelijke taak uitvoeren.

Schrijf bereken_verzending(bedrag, snel). Normale verzending is vanaf €50 gratis en kost daaronder €4,95. Snelle verzending kost altijd €8,95. Schrijf daarna bereken_totaal(bedrag, snel), die de eerste functie gebruikt en het bedrag plus verzending teruggeeft.

Test je functies 3 functie-aanroepen

Test 1 · Gratisbereken_totaal(60, "n")

Toon verwachte returnwaarde60

Test 2 · Normaal betaaldbereken_totaal(20, "n")

Toon verwachte returnwaarde24.95

Test 3 · Snelbereken_totaal(60, "j")

Toon verwachte returnwaarde68.95
14Pittig

Gewogen eindcijfer

Scheid de berekening van de beoordeling.

Schrijf eindcijfer(toets, project): de toets telt voor 60% en het project voor 40%. Schrijf ook beoordeling(cijfer), die Voldoende teruggeeft vanaf 5,5 en anders Onvoldoende. Roep beide functies aan vanuit een klein hoofdprogramma.

Test je functies 3 controles

Test 1eindcijfer(6, 8)

Toon verwachte waarden6.8
Voldoende

Test 2eindcijfer(5, 5)

Toon verwachte waarden5.0
Onvoldoende

Test 3 · Grensgevaleindcijfer(5.5, 5.5)

Toon verwachte waarden5.5
Voldoende
15Gevorderd

Welke aanbieding is echt goedkoper?

Hergebruik je kortingsfunctie en vergelijk de eindprijzen.

Gebruik prijs_na_korting() uit opgave 11. Schrijf goedkoopste_aanbieding(prijs_a, korting_a, prijs_b, korting_b). Geef "A", "B" of "Gelijk" terug.

Test je functie 3 vergelijkingen

Test 1goedkoopste_aanbieding(100, 10, 80, 0)

Toon verwachte returnwaardeB

Test 2goedkoopste_aanbieding(50, 20, 45, 10)

Toon verwachte returnwaardeA

Test 3 · Gelijkgoedkoopste_aanbieding(100, 10, 90, 0)

Toon verwachte returnwaardeGelijk

niveau 4Langere tentamenverhalen

De regels staan nu alleen in het verhaal. Maak zelf eerst een kort stappenplan en bepaal welke taak bij de functie en welke bij het hoofdprogramma hoort.

16Tentamen

Uitverkoop in de sneakerwinkel

Verwerk opeenvolgende kortingen en meerdere klanten.

Situatie. Een paar van model basis kost €70 en model premium €110. Vanaf twee paar krijgt een klant 15% korting. Leden krijgen daarna nog 10% korting op het overgebleven bedrag. De winkel wil de dagomzet en het aantal bestellingen met korting weten.

Jouw opdracht: schrijf bereken_sneakerbestelling(model, aantal, lid) en geef het te betalen bedrag terug. Vraag in het hoofdprogramma hoeveel klanten er zijn en verwerk ze met een for-lus. Toon per klant het bedrag en na afloop de omzet en het aantal bestellingen waarop minstens één korting gold.

Let op: twee kortingen na elkaar tel je niet bij elkaar op; de tweede korting gaat van het al verlaagde bedrag af.

Test je oplossing 4 controles

Functie 1bereken_sneakerbestelling("basis", 1, "n")

Toon verwachte returnwaarde70

Functie 2bereken_sneakerbestelling("premium", 2, "n")

Toon verwachte returnwaarde187.0

Functie 3bereken_sneakerbestelling("basis", 2, "j")

Toon verwachte returnwaarde107.1

DagtestDe drie bestellingen hierboven

Toon verwachte einduitvoerOmzet: 364.1
Bestellingen met korting: 2
17Tentamen

Treinkaartjes voor een dagje uit

Pas één van twee kortingen toe en bereken een groepsbedrag.

Situatie. Een treinrit kost €0,18 per kilometer. Kinderen jonger dan 12 krijgen 50% korting. Andere reizigers krijgen in de daluren 20% korting. De kinderkorting heeft voorrang; kortingen worden niet gecombineerd.

Jouw opdracht: schrijf bereken_ritprijs(kilometers, leeftijd, daluren). Vraag daarna één keer de afstand, of het daluren zijn en hoeveel reizigers meegaan. Vraag per reiziger de leeftijd, roep de functie aan en tel alle kaartjes op.

Test je oplossing 4 controles

Kindbereken_ritprijs(50, 10, "n")

Toon verwachte returnwaarde4.5

Volwassene in dalurenbereken_ritprijs(50, 30, "j")

Toon verwachte returnwaarde7.2

Vol tariefbereken_ritprijs(50, 30, "n")

Toon verwachte returnwaarde9.0

Groepstest50 km, daluren j
Leeftijden: 10 en 30

Toon verwachte einduitvoer2 kaartjes
Totaal: 11.7
18Tentamen

Reserveringen op de camping

Combineer kosten per nacht, seizoenskorting en vaste kosten.

Situatie. Een kampeerplek kost €18 per nacht plus €4 per persoon per nacht. In het laagseizoen krijgt een verblijf van minstens drie nachten 20% korting. Na de korting komt één keer €7,50 servicekosten bij de reservering.

Jouw opdracht: schrijf bereken_verblijf(nachten, personen, laagseizoen). Verwerk daarna met een while-lus reserveringen totdat de medewerker n invoert. Toon het aantal reserveringen en de totale verwachte omzet.

Test je oplossing 4 controles

Kort verblijfbereken_verblijf(2, 2, "n")

Toon verwachte returnwaarde59.5

Laagseizoenbereken_verblijf(4, 2, "j")

Toon verwachte returnwaarde90.7

Precies drie nachtenbereken_verblijf(3, 1, "j")

Toon verwachte returnwaarde60.3

OverzichtDe reserveringen van test 2 en 3

Toon verwachte einduitvoerReserveringen: 2
Omzet: 151.0
19Tentamen

Elektronicawinkel met verzekering

Bepaal welke onderdelen wel en niet onder de korting vallen.

Situatie. Bij een producttotaal van minstens €500 krijgt de klant 8% korting. Een verzekering kost €25 per product en wordt pas na de korting toegevoegd; de verzekering zelf krijgt dus nooit korting.

Jouw opdracht: schrijf bereken_aankoop(prijs, aantal, verzekering). Verwerk daarna een vooraf gevraagd aantal klanten. Toon de totale omzet en het hoogste betaalde orderbedrag, zonder een lijst te gebruiken.

Test je oplossing 4 controles

Geen kortingbereken_aankoop(200, 2, "n")

Toon verwachte returnwaarde400

Korting en verzekeringbereken_aankoop(300, 2, "j")

Toon verwachte returnwaarde602.0

Precies de grensbereken_aankoop(500, 1, "j")

Toon verwachte returnwaarde485.0

DagtestDe bestellingen van test 1 en 2

Toon verwachte einduitvoerOmzet: 1002.0
Hoogste bestelling: 602.0
20Eindopdracht

Festivalreserveringen

Combineer groepskorting, vroegboekkorting en een onbekend aantal reserveringen.

Situatie. Een festivalticket kost €45. Vanaf vijf tickets krijgt de hele reservering 12% groepskorting. Een vroegboeker krijgt daarna nog 10% korting op het overgebleven bedrag. Per reservering komt uiteindelijk één keer €2,50 transactiekosten erbij.

Jouw opdracht: schrijf bereken_reservering(aantal, vroegboeker). Verwerk met een while-lus alle reserveringen. Vraag na iedere reservering of er nog één volgt. Toon na afloop het aantal verkochte tickets, de totale omzet en het grootste aantal tickets in één reservering.

Let op de volgorde: eerst groepskorting, daarna eventueel vroegboekkorting en pas daarna de vaste transactiekosten.

Test je oplossing 4 controles

Kleine reserveringbereken_reservering(2, "n")

Toon verwachte returnwaarde92.5

Groepskortingbereken_reservering(5, "n")

Toon verwachte returnwaarde200.5

Beide kortingenbereken_reservering(5, "j")

Toon verwachte returnwaarde180.7

FestivaloverzichtReservering 1: 2 tickets, n
Reservering 2: 5 tickets, j

Toon verwachte einduitvoerTickets: 7
Omzet: 273.2
Grootste reservering: 5
Klaar? Doe de eindcontrole
  • Geeft de functie één bedrag terug met return?
  • Worden de twee kortingen na elkaar toegepast?
  • Worden transactiekosten precies één keer per reservering toegevoegd?
  • Stopt de lus na n en kloppen alle drie de eindtotalen?