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 loop (geen functie) dat voor integers vraagt van de gebruiker. De while loop 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 de functie number_stairs(size) dat de integer size ontvangt 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) dat een string binnen krijgt en de langste substring teruggeeft dat aan het begin en aan het einde van de gegeven phrase staat, zonder te overlappen. De enige ingebouwde python functie die je mag gebruiken is len(). 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 deze tekst heeft de letter ‘C’ de hoogste frequentie en zouden we kunnen aannemen dat dat de letter ‘e’ is in de originele tekst.

a. Schrijf de functie count_char(zin, let) met docstring. Deze functie kriigt twee strings binnen waarbij zin een hele zin is en let een enkele letter. De functie geeft terug hoe vaak let voorkomt in zin. . Maak gebruik van lus(sen) , vergeet geen docstring toe te voegen en test de functie met drie assertions. (10)

b. Schijf de functie max_freq_letter(z) aan de hand van het plan dat je bij opgave 5b hebt ontworpen. 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 niet gelukt zijn bij 5a om de functie count_char(zin, let) te schrijven mag je onderstaande functie gebruiken als 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)