Lees beide uiteinden
Laat edges een tuple met het eerste en laatste codepunt teruggeven. Bij lege tekst moeten beide onderdelen een lege string zijn.
Op een scherm past soms alleen een korte plaatsnaam of een aangepast label. Je wilt dan een begin, einde of middendeel uit bestaande tekst kiezen. De slices die je al bij lijsten gebruikte, werken ook voor strings, maar veranderen de oorspronkelijke tekst niet.
Een index is een genummerde positie in een reeks. Python begint bij nul: bij "DELFT" staat de D op positie nul en de T op positie vier. Een index van min één leest de laatste positie, min twee de voorlaatste.
| Positie vanaf het begin | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| Tekst | D | E | L | F | T |
| Positie vanaf het einde | -5 | -4 | -3 | -2 | -1 |
Python telt hierbij codepunten: genummerde teksteenheden uit Unicode. Bij deze plaatsnaam zijn dat gewoon de vijf letters. Een zichtbare letter met een los accent kan uit meer codepunten bestaan; dat onderzoeken we later in deze module.
Een slice zoals label[1:4] neemt het begin mee en laat het einde weg. Zij kiest dus posities één, twee en drie. Het resultaat is weer een string, ook wanneer die string maar één codepunt bevat.
Laat je het begin weg, dan kies je vanaf het begin. Laat je het einde weg, dan kies je door tot het einde. Een grens voorbij de beschikbare tekst wordt ingekort: label[:20] levert hier de hele plaatsnaam op.
Met een derde onderdeel kies je een stap, zoals bij lijsten. De schrijfwijze label[::-1] doorloopt alle posities vanaf het einde met stappen van min één. Zo keer je de volgorde van codepunten om; bij samengestelde zichtbare tekens is dat niet automatisch een nette visuele omkering.
Voorspel de zeven uitvoerregels en voer daarna dit volledige voorbeeld uit. Let bij de laatste twee regels op het verschil tussen een nieuw label en de oorspronkelijke tekst.
label = "DELFT"
print(label[0])
print(label[-1])
print(label[1:4])
print(label[:20])
print(label[::-1])
updated = "M" + label[1:]
print(updated)
print(label)D T ELF DELFT TFLED MELFT DELFT
Een string is onveranderlijk: je kunt niet met label[0] = "M" een positie overschrijven. Je kunt wel een nieuwe string maken door stukken met + samen te voegen. Het voorbeeld plakt de M vóór alles vanaf positie één en bewaart die nieuwe waarde in updated.
De lengte is vijf, maar positie vijf bestaat niet: de laatste positie is vier. Deze zelfstandige foutvariant probeert toch die zesde positie te lezen.
label = "DELFT"
print(label[5])IndexError: string index out of range
Je ziet IndexError. Ook positie nul bestaat niet bij een lege string. Een slice mag daarentegen een leeg resultaat geven: text[:1] en text[-1:] leveren bij lege invoer beide "" op.
Gebruik in de opdrachten de functies die al klaarstaan en geef hun resultaat terug met return. edges geeft een tuple met twee strings terug, zoals je eerder meerdere waarden teruggaf. De andere functies leveren één string op.
Bij replace_first vervangt de meegegeven tekst het eerste codepunt. Alles vanaf positie één blijft staan; bij lege invoer bestaat dat overgebleven deel uit niets. Een lege vervanging verwijdert daardoor alleen het eerste codepunt.
Laat edges een tuple met het eerste en laatste codepunt teruggeven. Bij lege tekst moeten beide onderdelen een lege string zijn.
Laat without_edges alle tekst zonder het eerste en laatste codepunt teruggeven. Bij nul, één of twee codepunten is het resultaat leeg.
Laat replace_first het eerste codepunt vervangen door replacement. Behoud de rest; bij lege invoer wordt replacement het hele resultaat.
Laat backwards de codepunten in omgekeerde volgorde teruggeven. Ook een lege string moet een geldige invoer zijn.
Hierna verdeel je tekst in onderdelen en voeg je die met een gekozen scheidingsteken weer samen.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.