Les 7 · Module 1 · Fundament (alleen Python)
Strings bewerken
Tekst doorzoeken, knippen en opmaken met indexen, slicing en stringmethodes.
🎯 Na deze les kun je
- indexen en slicing toepassen op tekst
- stringmethodes zoals upper, strip, split en replace gebruiken
- uitleggen dat strings onveranderlijk zijn
Bijna elk programma werkt met tekst: namen, postcodes, regels uit een bestand, antwoorden van de gebruiker. En die tekst is zelden netjes. Er staan spaties omheen, hoofdletters waar je ze niet verwacht, komma's in plaats van punten. In deze les leer je tekst ontleden en opschonen met indexen, slicing en stringmethodes (string methods).
Een string is een rij tekens
Elk teken in een string heeft een positie, de index. Python begint te tellen bij 0.
tekst: P y t h o n
index: 0 1 2 3 4 5
negatief: -6 -5 -4 -3 -2 -1
taal = "Python"
print(taal[0])
print(taal[5])
print(taal[-1])
print(len(taal))
P
n
n
6
len() geeft de lengte: het aantal tekens. De laatste index is dus altijd len(tekst) - 1, of simpelweg -1. Negatieve indexen tellen vanaf het eind.
taal = "Python"
print(taal[6])
IndexError: string index out of range
Slicing: een stuk uitknippen
Met tekst[start:stop] knip je een stuk uit. Net als bij range() doet de stop niet mee.
postcode = "1234 AB"
print(postcode[0:4])
print(postcode[:4])
print(postcode[5:])
print(postcode[-2:])
1234
1234
AB
AB
Laat je de start weg, dan begin je vooraan; laat je de stop weg, dan ga je door tot het eind. Een slice buiten de grenzen geeft geen fout, maar gewoon minder tekens: "abc"[1:100] is "bc".
Een derde getal is de stap. tekst[::-1] loopt achteruit en draait de tekst om:
print("lepel"[::-1])
print("Python"[::2])
lepel
Pto
Stringmethodes
Een methode is een functie die bij een waarde hoort. Je roept hem aan met een punt: tekst.upper().
| Methode | Doet | Voorbeeld | Resultaat |
|---|---|---|---|
.strip() |
spaties (en enters) aan begin en eind weg | " hoi \n".strip() |
"hoi" |
.lower() / .upper() |
kleine / hoofdletters | "Ja".lower() |
"ja" |
.title() |
elk woord met hoofdletter | "sam de vries".title() |
"Sam De Vries" |
.replace(oud, nieuw) |
vervangen | "12,50".replace(",", ".") |
"12.50" |
.split(scheiding) |
opdelen in een lijst | "a;b;c".split(";") |
["a", "b", "c"] |
sep.join(lijst) |
lijst samenvoegen | "-".join(["a", "b"]) |
"a-b" |
.startswith(x) / .endswith(x) |
begint/eindigt met | "foto.jpg".endswith(".jpg") |
True |
.isdigit() |
alleen cijfers? | "1234".isdigit() |
True |
.count(x) / .find(x) |
tellen / positie zoeken | "banaan".count("a") |
3 |
split() zonder argument splitst op elke reeks spaties. Het resultaat is een lijst; die behandelen we in les 8. Voor nu: je kunt er met een index in kijken.
zin = " De kat zit op de mat "
woorden = zin.split()
print(woorden)
print(len(woorden))
print(" ".join(woorden))
['De', 'kat', 'zit', 'op', 'de', 'mat']
6
De kat zit op de mat
Ook in werkt op strings: "kat" in zin is True.
Strings zijn onveranderlijk
Een string kun je niet aanpassen. Een methode als .upper() maakt een nieuwe string en laat de oude met rust. Voorspel:
naam = "sam"
naam.upper()
print(naam)
sam
De hoofdletterversie is gemaakt en direct weggegooid, omdat je hem nergens opsloeg. Schrijf daarom naam = naam.upper(). Ook één letter vervangen gaat niet:
naam = "sam"
naam[0] = "S"
TypeError: 'str' object does not support item assignment
Bouw in plaats daarvan een nieuwe string: naam = "S" + naam[1:], of gebruik .capitalize().
Methodes kun je achter elkaar zetten (chaining). Ze worden van links naar rechts uitgevoerd:
invoer = " JAN jansen "
print(invoer.strip().lower().title())
Jan Jansen
Uitgewerkt voorbeeld: postcode controleren
Een Nederlandse postcode bestaat uit 4 cijfers en 2 letters. Gebruikers typen 1234ab, 1234 AB of 1234 ab.
invoer = " 1234 ab "
postcode = invoer.strip().upper().replace(" ", "")
cijfers = postcode[:4]
letters = postcode[4:]
geldig = len(postcode) == 6 and cijfers.isdigit() and letters.isalpha()
print(postcode, geldig)
print(f"Netjes: {cijfers} {letters}")
1234AB True
Netjes: 1234 AB
Eerst normaliseren (spaties weg, hoofdletters), dan opknippen, dan controleren. Die volgorde maakt de controle eenvoudig.
Typische fouten
- Resultaat van een methode niet opslaan:
tekst.strip()alleen doet niets zichtbaars. Schrijftekst = tekst.strip(). - Index buiten bereik: bij
"abc"[3]krijg jeIndexError. Onthoud: de laatste index is lengte min 1. - Haakjes vergeten:
naam.upperzonder()roept de methode niet aan.print(naam.upper)toont iets als<built-in method upper of str object at 0x...>.
Oefenen
Oefening 1. s = "programmeren". Voorspel s[3], s[-3], s[:7], s[7:] en s.count("m").
Modelantwoord oefening 1
s = "programmeren"
print(s[3], s[-3], s[:7], s[7:], s.count("m"))
g r program meren 2
Oefening 2. Maak van "de VRIES, sam" de tekst "Sam de Vries". Gebruik split(","), strip() en de juiste hoofdlettermethodes.
Modelantwoord oefening 2
invoer = "de VRIES, sam"
delen = invoer.split(",")
achternaam = delen[0].strip().lower()
voornaam = delen[1].strip().capitalize()
tussen, rest = achternaam.split(" ", 1)
print(f"{voornaam} {tussen} {rest.capitalize()}")
Sam de Vries
Tussenvoegsels zoals "de" en "van" blijven klein. Deze oplossing werkt alleen als er precies één tussenvoegsel is; in het lab maak je hem robuuster.
Oefening 3. Schrijf een programma dat controleert of een woord een palindroom is (van achteren hetzelfde als van voren), zonder op hoofdletters te letten. Test met "Lepel" en "Kayak".
Modelantwoord oefening 3
for woord in ["Lepel", "Kayak", "Python"]:
w = woord.lower()
print(woord, w == w[::-1])
Lepel True
Kayak True
Python False
Lab: postcode en naam
- Maak
formulier.py. - Vraag een postcode. Normaliseer en controleer hem zoals in het voorbeeld. Blijf vragen tot hij geldig is (invoerlus uit les 6).
- Vraag voornaam en achternaam los. Print de naam netjes: voornaam met hoofdletter, eventuele tussenvoegsels (
van,de,der,den,van der) klein, rest van de achternaam met hoofdletter. - Print tot slot:
Sam van der Berg, 1234 AB. - Controleer met
beetje check concepten-les7.
Samenvatting
- Een string is een rij tekens met indexen vanaf 0;
-1is het laatste teken. tekst[start:stop:stap]knipt een stuk uit; de stop doet niet mee.- Stringmethodes (
strip,lower,upper,replace,split,join, …) geven een nieuwe string terug. - Strings zijn onveranderlijk (immutable): sla het resultaat op in een variabele.
- Eerst normaliseren, dan controleren: dat maakt invoer verwerken veel eenvoudiger.
In les 8 werk je met lijsten: één variabele die veel waarden tegelijk bevat.
Lab
Postcodecontrole en het netjes opmaken van een naam
🔒 Het live lab hoort bij de volledige cursus. Met één aankoop (€ 29,00, eenmalig) krijg je alle lessen, de live labs en het certificaat. Geen abonnement. Je kunt dit lab altijd gratis lokaal met Docker doen.
Klaar? Controleer je werk met:
$ beetje check concepten-les7
📝 Quiz: strings bewerken
Dit was de laatste gratis les
Je hebt les 1–7 van Een beetje programmeren: concepten die overal terugkomen gratis gevolgd. Wil je verder? Met één aankoop (€ 29,00, eenmalig) krijg je de overige 26 lessen, de live labs en het certificaat. Geen abonnement.