# 2021-2022 Deeltoets 1 ## Opgaven De opgaven kun je vinden op: [https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2021-2022_Deeltoets_1.pdf](https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2021-2022_Deeltoets_1.pdf) ## Uitwerkingen ### Toetsvraag 1a ```python def bereken_bmi(l, g): bmi = g / (l / 100) ** 2 return bmi ``` De lokale variabele `bmi` is niet echt nodig: ```python def bereken_bmi(l, g): return g / (l / 100) ** 2 ``` ### Toetsvraag 1b Een stap-voor-stap oplossing: ```python lengte_string = input('Geef de lengte in cm: ') gewicht_string = input('Geef het gewicht in kg: ') lengte = int(lengte_string) gewicht = int(gewicht_string) bmi = bereken_bmi(lengte, gewicht) print('De BMI is:', bmi) ``` Een compacte oplossing: ```python print('De BMI is:', bereken_bmi(int(input('Geef de lengte in cm: ')), int(input('Geef het gewicht in kg: ')))) ``` ### Toetsvraag 1c Met een `for`-loop: ```python def bmi_met_lengte(lengte, start, stop): for gewicht in range(start, stop + 1): print('Lengte:', lengte, 'Gewicht:', gewicht, 'BMI:', bereken_bmi(lengte, gewicht)) ``` Met een `while`-loop: ```python def bmi_met_lengte(lengte, start, stop): while start <= stop: print('Lengte:', lengte, 'Gewicht:', start, 'BMI:', bereken_bmi(lengte, start)) start = start + 1 ``` Een recursieve oplossing: ```python def bmi_met_lengte(lengte, start, stop): if start <= stop: print('Lengte:', lengte, 'Gewicht:', start, 'BMI:', bereken_bmi(lengte, start)) bmi_met_lengte(lengte, start + 1, stop) ``` Nog een recursieve oplossing (om te laten zien hoe een je een eenvoudig probleem ook met een ingewikkeld programma kunt oplossen): ```python def bmi_met_lengte(lengte, start, stop): if start < stop: bmi_met_lengte(lengte, start, stop - 1) print('Lengte:', lengte, 'Gewicht:', stop, 'BMI:', bereken_bmi(lengte, stop)) ``` ### Toetsvraag 2 ```python def totale_prijs_met_korting(prijzen): totaal = 0 for prijs in prijzen: if prijs > 17.50: totaal = totaal + 0.75 * prijs else: totaal = totaal + prijs return totaal ``` Testcode waarin ook een aantal randgevallen worden getest: ```python artikelen = [12.50, 14.95, 65.45, 6.20, 81.90] print("De totale prijs na korting is:", round(totale_prijs_met_korting(artikelen), 2)) artikelen = [] print("De totale prijs na korting is:", round(totale_prijs_met_korting(artikelen), 2)) artikelen = [17.50] print("De totale prijs na korting is:", round(totale_prijs_met_korting(artikelen), 2)) artikelen = [17.51] print("De totale prijs na korting is:", round(totale_prijs_met_korting(artikelen), 2)) ``` Een compacte oplossing: ```python def totale_prijs_met_korting(prijzen): return sum([prijs * 0.75 if prijs > 17.50 else prijs for prijs in prijzen]) ``` In het bovenstaande programma wordt gebruik gemaakt van *list comprehension*. Dit is niet behandeld in de les, maar wordt uitgelegd in paragraaf 19.2 van het [boek](https://greenteapress.com/thinkpython2/thinkpython2.pdf#page=206).