Python basis
Werken met tekst
We hebben eerder gezien dat je code kunt herhalen in een for-loop. Een while-loop doet in principe precies hetzelfde, maar er zijn situaties waarbij een while-loop een betere oplossing is dan een for-loop.
Een van die situaties is bij applicaties waar user-input wordt gevraagd.
Bekijk onderstaande code eens..
prompt = "Vertel me iets dan geef ik terug wat je invoerde! \n" \
"Vul 'q' in om het programma te eindigen. \n"
active = True
while active:
message = input(prompt)
if message == 'q':
active = False
else:
print(message)
In gewoon nederlands:
Zolang de variabele active
gelijk is aan True
gaan we het volgende doen:
- Er wordt gechecked of de gebruiker de letter 'q' heeft ingegvoerd.
- Als dat zo is wordt
active
op False gezet. Het programma wordt dan gestopt. - Als dan niet zo is dan wordt hetgeen de gebruiker heeft ingevoerd op het scherm getoond.
Bij een while-loop wordt de code dus net zo lang herhaald totdat de conditie achter while
-loop False
is. Dan stopt de while loop.
Als het programma stopt, dan gaat alle gebruikers-input verloren. In het volgende stukje code zie je hoe je die gebruikersinput op kan slaan in een tekst-bestand:
prompt = "Vertel me iets dan geef ik terug wat je invoerde! \n" \
"Vul 'q' in om het programma te eindigen. \n"
active = True
lst = []
while active:
message = input(prompt)
if message == 'q':
active = False
fo = open('newtext.txt', 'wt')
for i in lst:
fo.write(i + "\n")
fo.close()
else:
lst.append(message)
Er wordt een lege list toegevoegd aan de code lst
Alle gebruikersinput wordt toegevoegd aan de list lst
.
Als er op q
wordt gedrukt wordt er....
- Een nieuw tekstbestand aangemaakt met de naam
newtext.txt
- Alle elementen in
lst
worden in een for-loop naar het text-bestand geschreven
Werken met tekstbestanden
fo = open('newtext.txt', 'wt')
fo
is een zogenaamde 'handle' naar het tekstbestand newtext.txt
. De methode open
accepteert 2 argumenten. De naam van het bestand en wat je met dat bestande gaat doen. De optie wt
staat voor 'write text'. Python gaat anders om met textbestanden dan met binaire bestanden zoals afbeeldingen e.d. De functie write betekent dat het tekstbestand wordt aangemaakt als het nog niet bestaat, maar als het wel bestaat, dan wordt het overschreven.
Als je informatie toe wilt voegen aan een bestaand bestand, dan gebruik je de optie at
. Dit staat voor 'append' zodat je meer tekst toe kan voegen.
Je kunt ook teksten uit bestanden lezen. Dan geef je de optie rt
Charactersets
Voor de computer zijn letters eigenlijk gewoon nummers. Een karakter wordt omgezet naar nullen en enen in een byte. Byte betekent letterlijk by eight. Dus er zijn 8 nullen en enen beschikbaar om een karakter op te slaan. Met 8 nullen en enen kun je 28 = 256 verschillende tekens maken. De letter 'a' wordt opgeslagen onder code 97, letter 'b' wordt dan 98 en 'c' dus 99 enzovoort. De hoofdletter 'A' wordt opgeslagen als code '65'. Python werkt onder de motorkap ook met deze codes. Je kunt deze codes opzoeken in de ASCII lijst. Kijk maar eens naar de sortering van deze list:
letters = ['a', 'A', 'B', 'b']
letters.sort()
print(letters)
#output
['A', 'B', 'a', 'b']
De hoofdletters komen voor de kleine letters, omdat die een lagere code hebben in de ASCII lijst. Je kunt de codering voor karakters opzoeken met python...
print(ord('a'))
#output
97
print(chr(97))
#output
a
Uit een loop breken
Stel je hebt dit programma....
prompt = "Geef me de naam van een voetbalclub \n" \
"(vul een 'q' in om te stoppen) \n"
while True:
vc = input(prompt)
if vc == 'q':
break
else:
print(f"De voetbalclub {vc} is helemaal baas!")
Zolang while True is wordt de code herhaald. Daar komt dus nooit een einde aan. In de vorige voorbeelden hadden we nog de variabele 'active' gebruikt om de while-loop te stoppen. In dit geval stoppen we de loop met het commando break
Teruggaan naar het begin van de loop
Met het commando continue
kun je de rest van de code in een loop overslaan en direct terug gaan naar het begin van de loop.
Stel je hebt onderstaande code...
num = 0
while num < 10:
num += 1
if num % 2 == 0:
continue
print(num)
Deze loop gaat net zo lang door totdat de variabele num
niet meer kleiner is dan 10. In het if-statement wordt bekeken of num
deelbaar is door 2. Als dat zo is wordt num
niet op het scherm getoond omdat continue
er voor zorgt dat de code wordt afgebroken en het programma weer terug gaat naar het begin van de loop. De print-opdracht aan het einde van het programma wordt dus overgeslagen!