Deze oefening moet je kunnen afwerken op 45 minuten. Hoofdstuk 7 (tuples/lijsten) moest niet
gekend zijn voor deze test.
Extra opmerkingen
Deze test werd online gemaakt, thuis - tijdens Corona. Daarom is er ook gevraagd om zelf functies toe te voegen.
- In de tips voor de functies (onderaan) werd toegevoegd welke functies er best toegevoegd worden.
Op de test worden de gevraagde functies ook altijd duidelijk beschreven.
- Er werd een concreter voorbeeld toegevoegd voor de functies. Op de test zal er ook altijd een concreet voorbeeld
toegevoegd worden.
Opgave
In deze oefening wordt gevraagd om een codering uit te werken van een zin.
Opmerkingen vooraf
- Er wordt één functie gevraagd.
- Je voegt zelf nog twee functies toe om de code overzichtelijk te houden. Eén van deze functies
moet
een logische functie zijn, de andere is dat niet.
Wil je graag nog ergens een derde functie toevoegen, dan mag dat.
- Voeg type hinting toe voor elke functie.
- Gebruik de extra functies correct.
- In Dodona is maar 1 test-case toegevoegd. De oefening wordt dus maar minimaal getest. Een antwoord
"correct" betekent dus zeker niet dat je oefening volledig juist is.
De codering
- De coderingssleutel is de basis voor de codering. De coderingssleutel is een positief geheel
getal
dat berekend wordt uit een startgetal:
- Bepaal het eerste priemgetal p1 dat strikt groter is dan het startgetal.
- Bereken een tweede priemgetal p2 : dit is het eerstvolgende priemgetal dat groter is dan
p1
- De coderingssleutel is het getal (p1 * p2) mod 26 - hierbij is mod de rest na
deling (modulus).
Voorbeeld voor startgetal 29:
p1 = 31
p2 = 37
sleutel = (31 * 37) mod 26 = 1147 mod 26 = 3
- De codering van een zin:
- Overloop alle letters van de zin
- Enkel de letters van het alfabet worden gecodeerd (zowel hoofdletters als kleine letters).
- Elke letter van het alfabet wordt vervangen door een letter die enkele plaatsen verder in het alfabet
voorkomt. Hierbij wordt een "circulair alfabet" beschouwd, wat betekent dat na de letter z
opnieuw
de letter a volgt.
- De coderingssleutel bepaalt hoeveel plaatsen de letter wordt verschoven in het alfabet. Daarbij
blijven
hoofdletters en kleine letters behouden.
- Telkens er een letter gecodeerd is, verhoog je de coderingssleutel met 1 .
De coderingssleutel wijzigt dus enkel voor letters van het alfabet (hoofdletters of kleine
letters).
Voorbeeld: codeer de zin Dd8z met coderingssleutel = 3:
D -> G / coderingssleutel = 4
d -> h / coderingssleutel = 5
8 -> 8 / coderingssleutel ongewijzigd
z -> e / coderingssleutel = 6
Codering is: Gh8e
De opgave
Schrijf de functie
codeer. Deze functie heeft twee parameters:
- de eerste parameter is het startgetal voor het bepalen van de coderingssleutel.
- de tweede parameter is de zin die moet gecodeerd worden.
De functie bepaalt de
coderingssleutel uit het startgetal, en codeert met die
coderingssleutel de
meegegeven zin. De gecodeerde zin wordt teruggegeven.
Indien de eerste parameter
geen geheel getal voorstelt of indien de eerste parameter
negatief is wordt
de
zin ongewijzigd teruggegeven.
Tips voor de functies.
-
Schrijf de logische functie is_priem(getal) die nagaat of het opgegeven getal een
priemgetal is.
Een priemgetal heeft exact twee verschillende delers: 1 en zichzelf.
- Schrijf de functie get_sleutel(startgetal) die de coderingssleutel berekent voor het
opgegeven startgetal.
Voorbeelden
>>> is_priem(17)
True
>>> is_priem(16)
False
>>> get_sleutel(29)
3
>>> codeer(29, "Dd8z")
"Gh8e"
Opmerkingen - laatste controle
- Heb je zelf twee functies toegevoegd en gebruikt?
- Is er één logische functie?
- Werd type hinting toegevoegd voor elke functie?
- In Dodona is maar 1 test-case toegevoegd. De oefening wordt dus maar minimaal getest. Een antwoord
"correct" betekent dus zeker niet dat je oefening volledig juist is.
Oplossing
Een mogelijke oplossing:
oplossing.py
Veel succes!