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:

Bij een while-loop wordt de code dus net zo lang herhaald totdat de conditie achter while-loop Falseis. 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....

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!