07A: Strings

Les 7 kent drie delen A, B, C die in een willekeurige volgorde kunnen worden doorgenomen.

Tot nu toe hebben we strings (items van het type str) alleen nog maar op eenvoudige wijze gebruikt. In deze les zullen we laten zien hoe we strings kunnen bewerken: hoe ze kunnen worden opgesplitst, hoe ze zijn samen te voegen, en hoe de individuele karakters (letters en tekens) kunnen worden opgespoord die deel uit maken van een string.

Wat is een string?

Alle gegevens die op een computer worden bewaard bestaan uit 0-en en 1-en. Inclusief tekst, digitale boeken, plaatjes, liedjes, video's en "programma's" zoals spelletjes en toepassingen. Strings, een voorbeeld van tekst, worden op de volgende wijze opgeslagen:

  • een string is een rij karakters (bijv., de string "Hello, World!" bestaat uit 13 karakters waaronder de letters "H", "e" en tekens als " " (spatie) en "!"
  • elk karakter wordt gerepresenteerd door een getal (bijv. "H" wordt gerepresenteerd door het getal 40; dat heet de ASCII/Unicode waarde)

Getallen worden intern op hun beurt weer bewaard in een 0-1 binair formaat.

Het bewerken van een string door deze te zien als een rij karakters: S[]

Om een string te kunnen bewerken is het nodig om de individuele karakters te kunnen selecteren. In Python wordt dit op de volgende manier gedaan: bij een string S en een integer index, is

S[index]
het karakter van S op positie index. Volgens afspraak begint de string bij index 0: dus is S[0] het eerste karakter en S[1] is het tweede karakter, enz. In "Hello, World!" bestaat de lijst van karakters uit:

Index   : 0  1  2  3  4  5  6  7  8  9 10 11 12
Karakter: H  e  l  l  o  ,     W  o  r  l  d  !
Merk op dat het karakter op index 6 een spatie is.

In veel andere programmeertalen, bestaat er een speciaal type voor karakters. In Python zijn karakters hetzelfde als strings van lengte 1, met als type str.

Het aantal karakters in een string vaststellen: len

Om het aantal karakters van een string te bepalen gebruiken we de Python functie len. Zo is bijvoorbeeld, len("Hello, World!") gelijk aan 13.

Meerkeuze Opgave: Laatste karakter
Welke expressie kan worden gebruikt om het laatste karakter van een string S te bepalen?
Juist! Hoewel len(S) het totaal aantal karakters in een string aangeeft, omdat het start met index 0, heeft het laatste karakter index len(S)-1.

Hier volgt een voorbeeld van het gebruik van len en [].

Voorbeeld: De lengte van een string en karakters

Je kunt hier in het Engels lezen over de reden dat de index bij 0 begint.

Delen van een string: S[:]

Een deel van een string heet een substring. Zo zijn bijvoorbeeld de strings "her" en "hal" substrings van "herhaling". Om een substring in Python te bepalen, gebruiken we de syntax

S[beginIndex:eindIndex]
.
Het levert de substring startend bij index beginIndex en eindigend bij eindIndex-1. Probeer eerst de output van het volgende programma te voorspellen voor dat je het uitvoert.
Voorbeeld: Substrings

Merk op dat bij het bepalen van substrings, het karakter met beginIndex wel deel van uit maakt, en het karakter met eindIndex niet. Dit geeft vaak aanleiding tot fouten. Al hoewel, het ook een aardig bijeffect heeft. Zo is vanwege deze keuze, de lengte van de substring S[i:j] altijd gelijk aan j-i.

Programmeeroefening: Een string inkorten
Schrijf een programma dat een string inleest met behulp van input(), en als output dezelfde string geeft maar dan zonder het eerste en laatste karakter. (Je mag aannemen dat de input string tenminste een lengte heeft van twee karakters.) Zo zal bijvoorbeeld bij input Python een correct programma ytho afdrukken.
Type de invoer voor je programma hieronder in.

Strings aan elkaar plakken: +

We weten allemaal dat 1+2=3. Met strings, krijgen we het volgende resultaat:

Voorbeeld: Strings optellen

Zoals te zien is, is het effect van S+T een nieuwe string die begint met S onmiddellijk gevolgd door T. Dit aan-elkaar-plakken wordt ook concatenatie genoemd.

Programmeeroefening: Heads and Tails
Schrijf een programma dat een string in leest met behulp van input(), en als output dezelfde string geeft maar waarbij de eerste en de laatste karakter zijn omgewisseld. (Je mag aannemen dat de string tenminste lengte 2 heeft. Zo zal bijvoorbeeld bij een input van kaart een correct programma taark afdrukken. Hint: gebruik hierbij de oplossing van je vorige programma als deel van het antwoord.
Type de invoer voor je programma hieronder in.

Wanneer je een string en een getal wilt samenvoegen, moet je het getal eerst omzetten in een string. Anders krijg je een van twee foutmeldingen, afhankelijk van de volgorde waarin je het probeert. Voer dit programma uit om de foutmeldingen te zien die kunnen opreden.
Voorbeeld
Voer het programma uit en bekijk de foutmelding. Zet daarna de regels in een andere volgorde om de 2-de samenvoeg-foutmelding te zien.
  • print("high " + 5)
  • print(110 + " percent")
Hier is een correct voorbeeld: de str() functie vertaalt het getal in een string voor de samenvoeging.
Voorbeeld
Vertalen van een getal in een string met str()

Zoals we hebben aangegeven in Les 4, kun je strings vermenigvuldigen met een geheel getal. Zo is S * n een afkorting voor S + S + ... + S, n keer.

Voorbeeld
String vermenigvuldiging

Codes voor karakters: ord, chr

Zoals we in de introductie van deze les al noemden, wordt in de computer elk karakter vastgelegd door een getal. Welk karakter correspondeert met welk getal? In het algemeen, hangt dat af van de codering die je gebruikt, maar vrijwel alle moderne computers gebruiken dezelfde standaard set voor de getallen tussen 32 en 255. Hier volgt de lijst van karakters met de getallen tussen 32 en 127:

ord: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
ord: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
ord: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
ord: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
ord: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
Later, in les 8, zul je een programma schrijven om deze tabel te genereren.
Het is niet zinvol om de hele tabel uit je hoofd te kennen, maar er zijn een paar aspecten die nuttig zijn om je te herinneren:

  • de kleine letters a, b, c, ..., z hebben opeenvolgende karakter codes
  • de hoofdletters A, B, C, ..., Z hebben opeenvolgende karakter codes
  • de cijfers 0, 1, 2, ..., 9 hebben opeenvolgende karakter codes

Het karakter met code 32 is de spatie, terwijl het karakter met code 127 een van de speciale "control" (besturing) karakters is. Enkele speciale control karakters zijn die met code 9 (tab), en 10 en 13 die worden gebruikt om naar een nieuwe regel te gaan.

In Python kun je een karakter omzetten in zijn bijbehorende code door middel van de ord functie. De chr functie doet het omgekeerde: de input is een getal en de uitvoer is het karakter met die code.

Voorbeeld
Voorbeeld vanord en chr

Programmeeroefening: De volgende letter
Schrijf een programma dat een karakter als input neemt (een string met lengte 1), waarbij we aannemen dat het een hoofletter is; en de output is de volgende letter uit het alfabet. Maar als de input 'Z' is, dan moet de output 'A' zijn. (Je zult daarbij een if statement nodig hebben. Voor nog een aanwijzing klik hier.)
Type de invoer voor je programma hieronder in.

Sommige systemen ondersteunen slechts karakters met code tussen de 32 en 127; andere systemen hebben karakters die kunnen worden afgedrukt tot code 255 of zelfs 65535; in Unicode bestaan honderdduizenden karakters. Je kunt meer lezen over de geschiedenis hier of hier.

Hier volgen nog twee oefeningen. Daarmee sluiten we het hoofdstuk af.

Programmeeroefening: Potjeslatijn
Potjeslatijn is een onzin taal. Om een woord vanuit het Engels om te zetten naar potjeslatijn, verplaats je de eerste letter naar het einde en je voegt er daarna "ay" aan toe. Zo wordt in het potjeslatijn bijvoorbeeld, monkey onkeymay , en wordt word ordway. Schrijf een programma dat een enkelvoudig woord als input heeft en het woord vervolgens omzet naar het potjeslatijn. (In werkelijkheid, heeft potjeslatijn complexere regels, maar die laten we achterwege in verband met het doel van deze oefening.)
Type de invoer voor je programma hieronder in.

Programmeeroefening: The Name Game
The Name Game (het namenspel) laat je een liedje maken bij een naam van iemand. Luister naar het liedje en probeer om een idee te krijgen hoe het werkt:
Je programma moet de naam van een persoon als invoer krijgen, "pearl" bijvoorbeeld, en print het liedje uit zoals

pearl, pearl, bo-bearl
banana-fana fo-fearl
fee-fi-mo-mearl
pearl!
Merk op dat de naam drie keer terugkomt; en de naam komt verder nog drie keer voor waarbij de eerste letter vervangen wordt door b, f, of m. (In werkelijkheid heeft het liedje complexere regels, maar die laten we achterwege in verband met het doel van deze oefening.)
Type de invoer voor je programma hieronder in.

Ga verder met de volgende les!