PGM1 Oefententamen#
Voor deze oefententamen en het echte tentamen mag je gebruik maken van een online Python editor. Je hebt de keus uit:
Opgave 1 (10pt)#
Een groenteteler heeft een perceel waarop hij tomaten, paprika’s en komkommers verbouwt. Hij houdt de opbrengst van elk gewas bij in kilogram. Stel dat de opbrengsten van de tomaten, paprika’s en komkommers respectievelijk in de variabelen opbrengst_tomaten
, opbrengst_paprikas
, en opbrengst_komkommers
zijn opgeslagen.
Schrijf een aantal toekenningen (geen functie) waar de opbrengst voor tomaten 150 kilogram, voor paprika’s 120 kilogram en voor komkommers 80 kilogram is.
Bereken vervolgens de totale opbrengst in kilogram van het perceel en sla deze waarde op in de variabele totale_opbrengst
.
De prijzen van de gewassen zijn als volgt:
tomaat: €3,24 per kilo
paprika: €2,87 per kilo
komkommer: €1,48 per kilo
Bereken nu de totale omzet van het perceel en sla deze waarde op inde variabele totale_omzet
.
Maak bij alle berekeningen gebruik van de drie variabelen die je eerder hebt gedefinieerd (opbrengst_tomaten
,opbrengst_paprikas
, en opbrengst_komkommers
).
Print tot slot de waarden van de variabelen totale_opbrengst
en totale_omzet
.
Opgave 2 (10pt)#
De Saffir-Simpson Hurricane Wind Scale is een classificatie die in de meteorologie wordt gebruikt om tropische cyclonen naar hun kracht in te delen. Je ziet hier de waarden die bij de verschillende categorieën horen, waar TS staat voor tropical storm en TD voor tropical depression.
Categorie |
km/h |
---|---|
5 |
\(\ge\) 252 |
4 |
209 \(-\) 251 |
3 |
178 \(-\) 208 |
2 |
154 \(-\) 177 |
1 |
119 \(-\) 153 |
TS |
63 \(-\) 118 |
TD |
\(\le\) 62 |
Gegeven is een variabele windspeed
die staat voor windsnelheid in km/h, deze toekenning hoef je niet te schrijven. Schrijf een conditioneel statement (geen functie) om de categorie (1, 2, 3, 4, 5, TS of TD) af te drukken (printen) volgens de regels hierboven. Je hoeft de categorie dus niet in een variabele op te slaan.
Opgave 3 (10pt)#
Gegeven een lijst van getallen. We willen graag weten of de getallen bij elkaar opgeteld meer dan 100 zijn. Een student komt met de volgende oplossing:
def over_hundred(L):
result = 0
for i in L:
result += result + L[i]
if result > 100:
return True
return False
test = [12,13,14]
print(over_hundred(lc))
Helaas werkt de functie niet naar behoren. Pas de functie zo aan zodat het werkt. Maak enkel kleine aanpassingen, het is niet de bedoeling de hele functie te herschrijven. Vergeet de docstring niet en test de functie met drie assertions.
Opgave 4 (10pt)#
Schrijf een while lus (geen functie) die de gebruikers om integers vraagt. De while lus stopt zodra de gebruiker een negatief getal invoert. Uiteindelijk wordt er geprint hoeveel positieve getallen er zijn ingevoerd en ook de som van al deze positieve getallen wordt geprint.
Vragen voor input:
inp = int(input("Geef positief getal: "))
Voorbeeld van het programma:
Geef positief getal: 1
Geef positief getal: 3
Geef positief getal: 2
Geef positief getal: 5
Geef positief getal: 4
Geef positief getal: -1
Getallen gegeven: 5
Getallen opgeteld: 15
Opgave 5 (10pt)#
Schrijf een functie number_stairs(size)
die de integer size
accepteert en een ladder uitprint van nummers. Gebruik een dubbele lusconstructie.
Voorbeeld:
number_stairs(5)
output:
1
12
123
1234
12345
number_stairs(3)
output:
1
12
123
Opgave 6 (15pt)#
Schrijf de functie end_check(phrase)
die een string phrase
accepteert en de langste substring teruggeeft die aan het begin en aan het einde van de gegeven phrase
staat, zonder te overlappen. De enige ingebouwde Python functies die je mag gebruiken zijn len()
en range()
. Vergeet geen docstring toe te voegen en test de functie met drie assertions.
Voorbeelden:
“test” output: “t”
“testing” output: “”
“123test123” output: “123”
“xxx” output: “x”
Opgave 7 (25pt)#
Frequentieanalyse is, in cryptoanalyse, het onderzoek naar de frequentie van letters of groepen van letters van een versleutelde tekst. Het wordt gebruikt als hulpmiddel voor het breken van klassieke cryptografie, zoals het Caesarcijfer.
De methode is gebaseerd op het feit dat binnen elke geschreven taal er een frequentie waar te nemen is van bepaalde letters of lettercombinaties. De letter ‘e’ heeft in de Nederlandse taal de hoogste frequentie.
nmbcpzncj mvvp bc gpchscmrdc tvm kcrrcpq ng epncocm tvm kcrrcpq tvm ccm tcpqkcsrckbc rcjqr
In de bovenstaande tekst heeft de letter ‘c’ de hoogste frequentie en zouden we kunnen aannemen dit de letter ‘e’ is in de originele tekst.
a. Schrijf de functie count_char(zin, let)
die twee strings accepteert waar zin
een hele zin is en let
een enkele letter. De functie geeft terug hoe vaak let
voorkomt in zin
.
Je hoeft alleen rekening te houden met kleine letters. Maak hier gebruik van lus(sen), vergeet niet een docstring toe te voegen en test de functie met drie assertions. (10)
b. Schijf de functie max_freq_letter(zin)
die een string zin
accepteert. Deze functie moet het karakter in zin
teruggeven met de hoogste frequentie.
Je hoeft alleen rekening te houden met kleine letters. Maak gebruik van lus(sen), de functie count_char(zin, let)
en een lijst met alle letters van het alfabet. Vergeet geen docstring toe te voegen en test de functie met drie assertions. (15)
Mocht het je niet zijn gelukt om bij 7a de functie count_char(zin, let)
te schrijven dan mag je de onderstaande functie gebruiken ter vervanging.
def count_char (zin, let):
if len(zin) == 0:
return 0
elif zin[0] == let:
return 1 + count_char (zin[1:], let)
else:
return count_char (zin[1:], let)