Beetje Coderen

Les 7 · Module 1 · Fundament (alleen Python)

Strings bewerken

Tekst doorzoeken, knippen en opmaken met indexen, slicing en stringmethodes.

⏱ 45–60 minuten leestijd + oefenen

🎯 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. Schrijf tekst = tekst.strip().
  • Index buiten bereik: bij "abc"[3] krijg je IndexError. Onthoud: de laatste index is lengte min 1.
  • Haakjes vergeten: naam.upper zonder () 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

  1. Maak formulier.py.
  2. Vraag een postcode. Normaliseer en controleer hem zoals in het voorbeeld. Blijf vragen tot hij geldig is (invoerlus uit les 6).
  3. 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.
  4. Print tot slot: Sam van der Berg, 1234 AB.
  5. Controleer met beetje check concepten-les7.

Samenvatting

  • Een string is een rij tekens met indexen vanaf 0; -1 is 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.

Cursus kopen en verdergaan

Klaar? Controleer je werk met:

$ beetje check concepten-les7

📝 Quiz: strings bewerken

6 vragen · 70% nodig om te slagen

1. `woord = "kassabon"`. Wat is `woord[-3:]`?
2. Na `naam = "sam"` en `naam.upper()`: wat print `print(naam)`?
3. Wat geeft `"a,b,,c".split(",")`?
4. Welke foutmelding krijg je bij `"abc"[3]`?
5. Wat is het resultaat van `" Hoi ".strip().lower()`?
6. Hoe maak je van de lijst `['12', '05', '2026']` de tekst `12-05-2026`?

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.

Cursus kopen en verdergaan