LES 1: Kennismaking met Python, en verschillende soorten getallen en strings#
In dit hoofdstuk ga je door middel van kleine opdrachten steeds meer leren over hoe je python gebruikt om te programmeren. We eindigen dan met een opdracht, dat bestaat uit verschillende moelijkheden.
Om een ‘code te runnen’ moet je op de op de raket bovenaan de pagina klikken. De eerste keer zal het even duren, maar eenmaal ingeladen werkt het best snel.
We starten met een onderdeel over werken met verschillende typen variabelen (strings, integers, floats, etc) en zullen werken naar het werken met lijsten.
Om te starten, klik op de raket hierboven en run onderstaande code.
print("Hallo Wereld!")
Hallo Wereld!
Als je het goed hebt gedaan, is er een extra regel verschenen met Hallo Wereld! er op.
De commando print()
zorgt ervoor dat er iets verschijnt, zoals hier de tekst Hallo wereld. Wil je tekst printen, dien je dat tussen haakjes te doen. Deze tekst noemen we een STRING.
Probeer maar print(hallo wereld) zelf te typen, om het verschil te merken
print(hallo wereld)
File "<ipython-input-3-e83abb6b4a7a>", line 1
print(hallo wereld)
^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
Je krijgt een foutmelding. Dat gebeurt als python niet snapt wat je bedoelt. In dit geval snapte python niet dat je een tekst aan het typen was. Zonder de aanhalingstekens zeg je tegen python namelijk dat je de VARIABELEN hallo en wereld wilt printen, en die hebben we helemaal niet gedefinieerd (zoals we dat noemen, komen we later op terug).
Python vertelt wel wáár hij het niet meer snapt, dat zie je met het pijltje en de foutmelding “invalid syntax”. Deze tekst ben je ook wel eens op je rekenmachine tegen gekomen. Het is niets anders dan “ik snap niet wat je aan mij vraagt”-foutmelding. En jij moet dan gaan bedenken wat er fout is.
In python kan je ook rekenen zoals in je rekenmachine. Als je 3+4 typt en runt, dan komt er 7 uit, probeer maar:
3+4
7
Iets soortgelijks gebeurd dan ook met print(3+7)
print(3+7)
10
Python maakt onderscheid tussen verschillende soorten objecten tekst en getallen.
Het getal 3 is een geheel getal, een integer genoemd.
Het getal 3.0 is GEEN geheel getal, wordt ook wel een float genoemd. Floats zijn dus eigenlijk ‘decimale getallen’.
Letters zonder aanhalingstekens zijn variabelen. Zie het als een container met een naam, waar je dingen in kan opslaan. Het opslaan doe je met het =-teken. Bijvoorbeeld:
a = 4
en b = 3
. Het =-teken is dus niet een vergelijkingsteken zoals je dat gewend bent met wiskunde. In uitgebreidere woorden staat er ‘de variabel a wordt gedefinieerd als het getal 4’.
Zouden we dan a+b
opvragen dan is het resultaat 7. Zie stukje code hieronder.
a=4
b=3
a+b
7
Als je wilt controleren van welk type een variabele is, kan je het volgende proberen.
a = "dit is een string"
b = 5.2
c = 2
print(type(a))
print(type(b))
print(type(c))
<class 'str'>
<class 'float'>
<class 'int'>
Je ziet als het goed is <class 'str'>
etc staan.
Wil je graag controleren OF een variabele van een bepaald type is, kan je isinstance()
gebruiken Deze geeft dan True of False terug:
a = 'dit is een string'
print(isinstance(a, str))
True
nog meer over berekeningen#
Er zijn wat andere notaties in python dan je misschien gewend bent.
elementaire berekeningen
a+b
geeft de som van a en b
a-b
geeft het verschil tussen a en b
a*b
berekend het product, a keer b
a/b
berekend het quotient, a gedeeld door b. Merk op dat je prima integers kan invullen, maar van de uitkomst dan een zogeheten float word gemaakt (een getal met decimalen)
a**b
geeft a tot de macht b. Dit is anders dan in je zakrekenmachine, waar je ^ gebruikt. De logica achter ** is dat machtsverheffen in essentie herhaaldelijk vermenigvuldigen is: 2 keer 2 keer 2 keer…. ofwel vermenigvuldig 2 zes keer met zichzelf.
a//b
geeft de grootst mogelijke deling van b uit a, zonder rest
a%b
geeft de rest na deling, ook wel modulo rekenen genoemd. Hier wordt in een ander hoofdstuk verder op ingegaan.
Probeer hieronder uit, verander eventueel de waarden van a en b.
a= 15
b=6
print('a+b=', a+b)
print('a-b=', a-b)
print('a*b=', a*b)
print('a/b=', a/b)
print('a**b=', a**b)
print("a//b =", a//b)
print('a%b=',a%b)
a+b= 21
a-b= 9
a*b= 90
a/b= 2.5
a**b= 11390625
a//b = 2
a%b= 3
OPDRACHT Schrijf hieronder een stukje code dat het de som, product en verschil van 5 en 13 uitrekend. Gebruik print en gebruik variabelen.
#Noteer jer code hier
wat ingewikkeldere berekeningen wil je bijvoorbeeld de wortel van een getal, of werken met logaritmes, of andere type functies gebruiken, dan moet je daar een zogeheten bibliotheek voor openen, genaamd numpy (staat voor numerical python). Dat doe je het beste aan het begin van je stukje code. Wij gebruiken numpy, (numerical python).
import numpy as np
Wat deze regel doet aan begin van je code is de bibliotheek numpy importeren en dat opslaan als np, dat scheelt typwerk.
Uit deze bibliotheek halen we dan modules, ofwel functies. Een voorbeeld dat je vaak wilt gebruiken is misschien wortel: np.sqrt(5)
berekend de wortel van 5.
Maar bijvoorbeeld ook logaritme, sinus, cosinus, etc kan je gebruiken. Voor een compleet overzicht wat je allemaal kan oproepen met numpy:
https://numpy.org/doc/2.1/reference/routines.math.html
import numpy as np
np.sqrt(5)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[4], line 1
----> 1 import numpy as np
2 np.sqrt(5)
ModuleNotFoundError: No module named 'numpy'
De regel "Hallo Wereld"
noemen we een string, en een string kan je opslaan in een variable.
string1 = "appel”
zorgt er bijvoorbeeld voor dat de tekst “appel” wordt opgeslagen in de variabele string1. Dat kan trouwens ook met ‘enkele aanhalingstekens’ zoals hier ‘appel’. Ik doe dat zelf niet heel consequent, veel programma’s maakt er ook een andere kleur van (is in te stellen ergens, standaard is oranje’) zodat je snel kan herkennen wat een ‘string’ is, wat variabelen zijn en wat programmeeropdrachten. Het is je misschien al opgevallen dat print een andere kleur heeft…?
Strings mogen meerdere woorden bevatten:
groet = “Hallo iedereen”
slaat de hele zin Hallo iedereen dus op als variabele groet.
Een spatie is ook een string, kan je aangeven met
string4 = “ ”
En lege tekst is:
string5 = “”
, dus een string met 0 letters
Het schrijven van opmerkingen#
In een code kan je met de hashtag # opmerkingen plaatsen. Dit wordt niet gelezen door python, en maakt de leesbaarheid van je code wat beter. Je zal dat in de opdrachten hieronder een keer tegenkomen als ik gericht uitleg wil geven over een bepaalde regel.
Je kan de # ook gebruiken als je even een stukje code ‘uit’ wilt zetten.
Controleer hieronder dat inderdaad het deel door # niet wordt uitgevoerd
a = 5 #dit is dus zo'n voorbeeld van een commentaar
b = a # in deze regel zetten we b gelijk aan a
print(a) #hiermee verschijnt 5 in het scherm
#print(b) #hiermee verschijn er niet nog een 5 in het scherm, haal de eerste hashtag weg en dan zie je twee keer een 5
Je kan ook bewerkingen doen met strings. Je kan bijvoorbeeld twee strings aan elkaar plakken met +, run het volgende stukje maar.
string1 = "Hallo"
string2= "Wereld!"
print(string1+string2)
Hallo !!!!
Als het goed is, is de tekst HalloWereld! weergegeven. Had je er een spatie tussen gewild, kan je dat ook in de print commando verwerken, bijvoorbeeld als volgt:
string1 = "Hallo"
string2= "Wereld!"
print(string1+" "+string2)
Hallo Wereld!
Ook kan je bijvoorbeeld vaker string1 laten printen, bijvoorbeeld via print(3*string1). Probeer zelf maar
print(3*string1)
HalloHalloHallo
En er zijn ook wat we ‘methode’ noemen om bijvoorbeeld alle letters in HOOFDLETTERS te vervangen, of juist alleen in kleinere letters. Kijk maar wat de output is van de volgende twee stukjes code.
tekst = "Hallo Allemaal"
tekst.upper()
'HALLO ALLEMAAL'
tekst.lower()
'hallo allemaal'
De XXX.upper() is een commando dat als output geeft alle letters van de string XXX in uppercase (hoofdletter). let op het gebruik de punt en dan te naam van de methode die je gebruikt.
Een andere methode is ‘XXX.replace(P,Q ) waarmee je alle karakters in P kan vervangen door karakters Q in de string XXX
tekst = "Hallo Allemaal"
tekst.replace("A","a") # Dit vervangt de letter A door a
'Hallo allemaal'
tekst = "Hallo Allemaal"
tekst.replace("Allemaal","Wereld") # Dit vervangt de string "Allemaal" door "Wereld"
'Hallo Wereld'
tekst = "Hallo Allemaal"
tekst.replace("A","eeee") #dit vervangt de letter a door de 4 letters eeee. Merk dus op dat alleen A wordt vervangen door eeeee maar aa niet wordt vervangen, want dat is een ander karakter dan A
'Hallo eeeellemaal'
Ook kunnen we de individuele letters van een string afgaan. Dat gaat als volgt.
zin = "Hallo Wereld!"
print(zin[0])
print(zin[11])
print(zin[-2])
H
d
d
Als je de vorige code hebt gerund, kreeg je als output ‘H’ ‘o’ en ‘!’
print(zin[0])
print de 1e letter uit: we beginnen met 0 te tellen.
print(zin[4])
is dus de 5e letter van de zin, en dat is ‘o’
print(zin[-1])
print ! uit, dat is de laatste letter van het woord. Met de - kan je dus ‘van achteren’ van de string beginnen.
doe je print(zin[20]
dan krijg je een foutmelding, er zijn immers geen 21 “letters” in de string. De foutmelding is dan: IndexError: string index out of range
je bent inderdaad buiten het bereik. (Probeer maar in de code hierboven)
Je kan de lengte van de string bepalen met de code len( )
. Zie hieronder. Als het goed is is de output 13, en als je goed telt zijn er inderdaad 13 ‘karakters’: 1 spatie, 1 uitroepteken en 11 letters.
(Is het je ook hier opgevallen dat tekst tussen [ ] een andere kleur krijgt?)
print(len(zin))
13
Input van de gebruiker opvragen#
<<>>#
Soms wil je verschillende waarden uitproberen om mee te rekenen. Je wilt dan input van de gebruiker krijgen.
Met de optie input()
kan je aan de gebruiker (jij dus) vragen naar een waarde dat een variabele moet aannemen.
Voorbeeldje hieronder wordt in a
de input van de gebruiker opgeslagen. Tussen aanhalingstekens kan je tekst zetten, zodat je de gebruiker kan vertellen wat ie moet doen.
Dit wordt dan met 2 vermenigvuldigd in een print.
Uiteraard zijn gebruikers soms wat dom, dus moet je even controleren of de input inderdaad een getal is (int of float). Dat kan als volgt.
a = input("geef een getal a = ")
if isinstance(a,(int,float)):
print("verdubbeling van a: ", 2*a)
else print("je moet wel een getal invullen, met een punt als decimaal")
Je eerste algoritme met voorwaarden (if else) en de for loop.#
In deze paragraaf ga je een manier leren om systematisch door een string heen te lopen: de for-loop.
Stel ik wil het aantal keren “a” tellen in het woord “banaan”. Wat je heel basic dan doet is dan naar de eerst letter kijken, je afvragen of het een ‘a’ is, zo ja dan tel je +1 en zo niet doe je niets en ga je naar de volgende letter en doe je hetzelfde: is het een a, dan tel je 1 bij het totaal op en anders ga je door naar de volgende letter. Tot de letters op zijn. Als we het goed hebben gedaan zouden we als output ‘3’ moeten hebben.
Dit is in essentie de werking van de volgende for-loop. Lees het goed en zet ‘m aan.
woord = 'banaan'
aantal = 0
for letter in woord:
if(letter == "a"):
aantal = aantal + 1
print(aantal)
3
Deze code heeft 6 regels. We gaan ze af:
in regel 1 hebben we ‘banaan’ gedefinieerd in de variabele ‘woord’
in regel 2 hebben een de variabele ‘aantal’ gedefinieerd en gelijk gesteld aan 0. Dit moet het aantal letters a voor gaan stellen, en we beginnen met 0.
Regel 3 is in het nederlands vertaalt: “voor elke letter in het woord, doe het volgende”. In plaats van ‘letter’ had je elk ander variabelenaam kunnen verzinnen. Vaak is dat de letter ‘i’ van index. Het is niets anders dan een ‘tellertje’.
regel 4 is VERSPRONGEN, dat komt door de : aan het einde van de ‘for’. Je wilt namelijk nu een stukje code hebben dat alleen in de zogenaamde ‘for-loop’ plaatsvindt en niet er buiten. In deze regel staat if(…): in het nederlands vertaalt staat er ‘als de letter gelijk is aan a, dan moet het volgende gebeuren’. LET OP dat er nu 2 =-tekens staan, nu is het wel een ‘wiskundige =’. Als de letter NIET gelijk is aan a, dan slaat python de ingesprongen regel 5 over en gaat dan door naar beneden (komen we later een ander voorbeeld van tegen).
Regel 5 is nu ook extra versprongen. Als de variabele ‘letter’ een ‘a’ is, dan wil ik dat het aantal met 1 toeneemt. De regel aantal = aantal + 1
doet het volgende: het nieuwe aantal is gelijk aan het oude aantal plus 1.
Regel 6 is nu helemaal teruggesprongen naar de kantlijn. IN deze regel printen we de variabel aantal.
Wat er nu achterelkaar gebeurd in regel 3, 4 en 5 is het volgende. “Regel 3: voor letters in woord, doe het volgende.”. letter is nu gelijk aan ‘b’.
“Regel 4: als letter een ‘a’ is dan…” letter is nu niet gelijk aan ‘a’, dus we slaan de volgende stap (regel 5) over.
Er is verder niets meer in het blokje van de for loop, dus we veranderen nu van letter ‘b’ naar letter ‘a’ en gaan terug naar regel 4.
“regel 4: als letter een ‘a’ is dan…’ letter is nu wel gelijk aan a, dus we gaan naar regel 5. We vervangen nu aantal (=0) door aantal = 0 + 1, dus aantal is nu gelijk aan 1.
We zijn nu klaar in de for, dus gaan terug naar regel 4 en veranderen letter naar ‘n’. Dit is geen ‘a’, etc. etc etc.
Dit gaat door tot er geen letters meer over zijn, dus gaan we naar regel 6, en dat is de print opdracht.
In het volgende voorbeeld breiden we de vorige code een beetje uit. Naast de letter ‘a’ willen we nu ook de letter ‘n’ tellen. Als het geen ‘a’ of ‘n’ is dan tellen we ‘overige’. Als we het goed doen, tellen we 3x a, 2x n en 1x overige (namelijk de letter b) . In het volgende stukje code introduceren we ‘elif’ en een andere manier van printen.
woord = 'bAnaan'
aantala = 0
aantaln = 0
overig = 0
woord=woord.lower()
for letter in woord:
if(letter == "a"):
aantala = aantala+1
elif(letter == "n"):
aantaln = aantaln + 1
else:
overig = overig+1
print("aantal a = ", aantala,"\naantal n = ", aantaln, "\naantal overige letters = ", overig)
aantal a = 3
aantal n = 2
aantal overige letters = 1
iets meer regels dit keer. We hebben naast het woord banaan nu 3 variabelen. Namelijk ‘aantala’ dat het aantal letters a gaat voorstellen, ‘aantaln’ voor aantal n en ‘overige ‘ voor de overige letters. Die zijn in het begin allemaal nul.
In regel 4 starten we de for-loop.
In regel 5 is een inspringing, dat hebben we altijd na een : zodat python weet dat je dingen wilt gaan doen in een for loop of na een andere statement (zoals if en else)
regel 8 heeft elif
, dit is een ‘else if’, als niet aan de vorige else is voldaan, dan gaan we een nieuwe voorwaarde langslopen. In dit geval als de letter geen a is willen we checken of het een n is.
In regel 9 staat er nu else:
Dat betekend, dat als aan geen van bovenstaande voorwaarden is voldaan, dan moet er ‘dit’ gebeuren (something ELSE). Namelijk dat dan het aantal overige letters met 1 toeneemt. Daarna pas gaan we weer terug naar het begin van de for-loop.
Aan het einde zie je een manier om in 1 regel 3 zaken te printen en dat onder elkaar neer te zetten.
print("Aantal a = ",aantala)
doet het volgende: eerst wordt de tekst “aantal a = “ weergegeven, gevolg ddoor de waarde van variabele aantala (dat 3 moet zijn). De komma , onderbreekt de print opdracht zodat je zowel strings als waarden van variabelen kan printen, en dat kan je herhaaldelijk doen zoals je hierboven ziet. Er is een handig truukje om ‘enters’ temaken en dat doe je met \n . Dit ziet de printopdracht als ‘ik moet een nieuwe regel beginnen’. Dit bevorderd niet echt het lezen van de code zelf, maar wel van het eindproduct.
Je kan er ook voor kiezen om 3 printopdrachten gewoon onder elkaar te typen:
print("aantal a = : , aantala)
print("aantal n = ", aantaln)
print("aantal overige letters = ", overig)
.
Smaken verschillen hierin, doe wat je zelf prettig vind.
OPDRACHT
Maak een programma zoals hierboven, dat telt hoevaak elke klinker (A I O U E) voorkomt in de zin: “Wiskunde D is best een leuk vak! Met programeren als keuzeonderwerp.”
EXTRA Verzin ook manier om het totaal aantal medeklinkers te tellen in die zin. (hint: len(zin) telt het aantal karakters in de zin, let op: ook de spaties en . enz!)
OPDRACHT Maak het programma hieronder af, waarbij elke even index wordt geprint
zin = "Wiskunde D is Leuk"
evenletters = ""
for ... in ...:
if ...
evenletters = evenletters+...
print("de even letter zijn:", evenletters)
#het antwoord is dan Wsud sLu let op dat er twee spaties zijn, is immers ook deel van de string
Meer over de for loop, if, else en elif#
De for loop die in de vorige paragraaf hebt leren kennen loopt altijd stapsgewijs ‘van begin tot eind’ als je een string doorzoekt.
De for loop kan ook gebruikt worden in zogeheten lijsten. Daar zal een compleet ander hoofdstuk meer over gaan, maar kort gezegd kan je met het commando for i in range(0,10):
10 keer een set opdrachten uitvoeren. Wat hier in worden staat ‘voor de letter i gelijk aan 0 tot 10, doe dit: ‘.
De if gebruik je als je een opdracht onder een voorwaarde wilt uitvoeren. Stel dat je de kwadraten van de getallen 0 tot en met 5 wilt printen, maar niet die van 6 tot en met 9.
In woorden wil je dus invoeren: ‘als i kleiner of gelijk is aan 5, print dan i*i.’
In python is dat if(i<=5): print(i*i)
De statement if(i<=5)
wordt gedaan en krijgt een waarde True of False. Bij True wordt datgene uitgevoerd achter de :, en bij False wordt dagtene na de : overgeslagen.
Voor de andere getallen wil je dan misschien de derdemacht hebben. Omdat je nu óf getallen kleiner dan 6 kwadrateert, óf de rest tot de derdemacht verheft, heb je genoeg aan alleen een else. Wil je echter méér voorwaarden gebruiken, dan moet je een elif blijven gebruiken. De else reserveer je dan aan het eind voor ‘alle andere gevallen’.
LET OP: gebruik je géén elif, maar twee keer if achter elkaar gevolgd door een else, gebeurd er iets onverwachts. De laatste else wordt dan aan de tweede if geplakt.
Het hierboven beschreven voorbeeld is in het volgende stukje code uitgewerkt. Om duidelijk aan te geven welke if/elif/else wordt gebruikt is in de print opdracht de tekst ‘eerste voorwaarde’ ‘tweede voorwaarde’ en ‘anders’ gebruikt voor de eerste if, tweede if en de else.
DOEN: vervang elif door if en zie wat het verschil is. Antwoord: als je twee if’s gebruikt ipv if en elif, zie je dat de eerste zes keer (i=0 tot en met i=5) aan de eerste voorwaarde voldaan wordt, maar niet aan de tweede voorwaarde, dus gaat python ook de else achter de tweede if uitvoeren.
for i in range(0,10):
if(i<=5):
print('de eerste voorwaarde ',i,'*',i,'=',i*i)
if(i==6 or i==7):
print('de tweede voorwaarde ',i,'=',i)
else:
print('anders', i*i*i)
de eerste voorwaarde 0 * 0 = 0
anders 0
de eerste voorwaarde 1 * 1 = 1
anders 1
de eerste voorwaarde 2 * 2 = 4
anders 8
de eerste voorwaarde 3 * 3 = 9
anders 27
de eerste voorwaarde 4 * 4 = 16
anders 64
de eerste voorwaarde 5 * 5 = 25
anders 125
de tweede voorwaarde 6 = 6
de tweede voorwaarde 7 = 7
anders 512
anders 729
Volgende plaatje geeft schematisch het verschil tussen if, elif en else aan.
EINDOPDRACHT: Caesar Encryptie methode#
In deze opdracht gaan we een programma schrijven dat de zogeheten Caeser Encryptie toepast op een gegeven string.
Bij Caesar Encryptie wordt elke letter één of meerdere plaatsen in het alfabet opgeschoven. De tekst “abcd” wordt bijvoorbeeld “defg” als we alle letters drie plaatsen opschuiven. Zie volgende plaatje. Het gele rij moet de rode rij worden.
Wil je weer terug gaan, moet je van rode rij naar de gele rij gaan.
Ga zelf na dat er staat “ik ben caesar!” in het oranje tekstbalonnetje.
Er zijn verschillende methodes om dit aan te pakken. Wil je zelf aan de slag? Ga dan direct door naar de laatste opdracht. Geen idee hoe je moet beginnen, lees dan verder.
Een makkelijke methode is wellicht is gewoon een ‘sleutelstring’ maken, waarbij het alfabet een versprongen is.
We moeten dus eerst een lijst maken met het versprongen alfabet, en dan iedere letter in onze originele tekst vervangen door de verspringing in het alfabet.
We noemen de originele tekst ‘zin’ en de gecodeerde tekst ‘code’, en de lijst met versprongen alfabet noemen we de ‘sleutel’.
We beperken ons tot enkel het aanpassen van kleine letters, maar spaties en andere tekens blijven onveranderd.
In het codeblok hieronder kan je vast zelf uitproberen, maar direct daaronder werk ik al het antwoord uit.
zin = "hallo ik ben caesar!"
alfabet = 'abcdefghijklmnopqrstuvwxyz.,?! ' #het standaard alfabet, waaraan we de standaard leestekens . , ? en ! hebben toegevoegd
sleutel = 'defghijklmnopqrstuvwxyzabc.,?! ' #alleen het standaard alfabet, maar dan 3 versprongen. Merk op dat de leestekens op dezelfde plek zitten
code ="" # een lege string, genaamd code
for i in range(0,len(zin)): # een for loop, we gaan namelijk alle letters in de zin af
alfabetnummer = alfabet.find(zin[i]) # met alfabet.find() zoek je de index op, met dezelfde letter als zin op de i-de plek, aangegeven met zin[i].
sleutelletter = sleutel[alfabetnummer] # we kijken vervolgens deze index in de string sleutel
code=code+sleutelletter # en plakken deze letter achter code
print(code) # uiteindelijk printen we de code
kdoor ln ehq fdhvdu!
in de eerste vijf regels zijn gedefinieerd de zin die we willen coderen, wat het huidige alfabet is, wat de sleutel is, en definieren we de nieuwe zin dat ‘code’ gaat heten. In zowel alfabet en sleutel hebben we .?! en een spatie toegevoegd, deze willen we namelijk niet aanpassen. Wat we willen doen is de letter a in de zin vervangen door de letter d, maar niet dat een spatie een andere karakter krijgt, evenals de . ? en !
in de for loop staat for i in range(0,len(zin)):
…
Wat hier staat is dat we een variabele i definieren, die een voor een de waarden 0 tot len(zin)) gaat aannemen. len(zin) was het aantal karakters in de zin. range(0,5) genereert een lijst van 0 tot 5 (niet t/m), i zou dan eerste de waarde 0 aannemen, dan 1, dan 2, dan 3, en tot slot 4.
Daarna gebeurt achter elkaar het volgende:
We willen de eerste letter van de zin gaan vervangen (hier de w), dan moeten we eerst weten welke letter dat is en waar die staat in het aflabet. Dat gebeurd met alfabet.find(zin[i])
. Dit zoekt de ‘index’ op van het rijtje alfabet waar de letter horend bij zin[i] staat.
zin[i] is in het begin gelijk aan zin[0] en dat geeft de eerste karakter van de string “zin”, hier de letter w. het commando XXX.find() zoekt in je string XXX (hier alfabet) op welke plaats een bepaalde karakter staat. We willen w vinden in in het alfabet, dat is de 23e letter in het alfabet dus heeft indexwaarde 22 (want we beginnen met 0 te tellen!). er staat dus eigenlijk `alfabet.find(w)’ en geeft terug 22. We weten dus dat de eerste letter in de zin het 22 index is in alfabet.
We hebben dus in SLEUTEL nodig de karakter op index 22. Dat is de letter z. Dat vinden we met de regel sleutelletter = sleutel[alfabetnummer]
. Op dit moment staat er “sleutelletter = sleutel[22]” en dus is sleutelletter gelijk aan ‘z’.
Tot slot moet de eerste letter van “code” dus “z” worden. zoals je eerder hebt gezien plakken we deze letter aan het einde vast met `code = code + sleutelletter’. In het begin is code gelijk aan “”, een lege string, daar plak je nu ‘z’ aan vast dus de eerst letter zal z zijn.
Dan zijn we klaar inde for loop en gaat i nu gelijk zijn aan 1, en vinden we de tweede letter in de zin, zoeken we de bijhorende plaats in het alfabet en zoeken we op die plaats welke letter er staat in sleutel. Deze letter plakken we dan achter de z. Enzovoorts.
OPDRACHT1 (makkelijk)
Herschrijf bovenstaande code (kopier een plak hieronder en pas aan) zodat je een code krijgt dat 7 letters is opgeschoven.
OPDRACHT 2 (GEMIDDELD) Herschrijf de code zodat je juist de andere kant op gaat: gegeven een gecodeerde zin, wat was dan de originele zin
OPDRACHT 3 (MOEILIJKER) /OPEN VOOR DEZE OPDRACHT EEN ANDER PYTHON PROGRAMMA, BIJVOORBEELD https://colab.research.google.com/
Herschrijf de code waarbij input van de gebruiker wordt gevraagd Hieronder een kort voorbeeld hoe je dat kan doen.
zin = str(input("Geef de zin die je wilt coderen"))
stapgrootte = str(input("Geef de stapgrootte van caesars encryptie, een getal tussen de 0 en de 26"))