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.

Opgave

In deze oefening wordt gevraagd om een codering uit te werken van een zin.

Opmerkingen vooraf

De codering

  1. 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 
  2. 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 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.

Voorbeelden

>>> is_priem(17)
True
>>> is_priem(16)
False 
>>> get_sleutel(29)
3
>>> codeer(29, "Dd8z")
"Gh8e"

Opmerkingen - laatste controle

Oplossing

Een mogelijke oplossing: oplossing.py

Veel succes!