Capítol 7 — Treballant amb text
Capítol 7

Treballant amb text

Els textos no són una caixa tancada: pots mirar-ne caràcters, tallar-los i transformar-los.

Accedir a un caràcter: indexació

Una cadena de text (en anglès, string) és una seqüència de caràcters. Pots agafar un caràcter concret escrivint el seu índex entre claudàtors [ ]. El primer caràcter sempre té índex 0:

Els índexs negatius compten des del final: -1 és l'últim caràcter, -2 el penúltim, i així successivament:

Prova a canviar el text i els índexs per explorar com funciona:

Llargada amb len()

La funció len() retorna el nombre de caràcters d'un text, espais inclosos:

Combinat amb l'indexació, len() és molt útil per accedir a l'últim caràcter sense saber d'avançada quant és de llarg el text:

Retallar un fragment: slicing

En lloc d'agafar un sol caràcter, pots agafar un tros del text indicant inici i fi separats per :. La fi no s'inclou, igual que range():

El tercer valor opcional és el pas. Un pas de -1 recorre el text al revés — una manera còmoda d'invertir una cadena:

Experimenta retallant la teva pròpia cadena:

Mètodes habituals de text

Els textos tenen mètodes propis que es criden amb un punt: text.metode(). Cap d'ells modifica el text original; tots retornen un text nou.

.upper() i .lower() — converteixen a majúscules o minúscules:

.strip() — elimina els espais en blanc (i salts de línia) dels extrems. Molt útil per netejar l'entrada de l'usuari:

.replace(vell, nou) — substitueix totes les aparicions d'una subcadena per una altra:

.split() — divideix el text en una llista de paraules, separant pels espais (o per un altre separador que li passis):

Comprovar si un text conté alguna cosa

L'operador in comprova si una subcadena és dins d'un text. Retorna True o False:

Els mètodes .startswith() i .endswith() comproven si un text comença o acaba d'una manera concreta:

Recórrer un text amb for

Pots iterar directament sobre els caràcters d'un text amb for c in text:, igual que faries amb una llista de nombres:

Combinant el for amb un condicional, pots filtrar o comptar caràcters concrets. Per exemple, comptar quants espais té una frase:

Errors típics

1. IndexError: accedir a un índex que no existeix — si el text té 5 caràcters, l'índex vàlid va de 0 a 4 (o de -1 a -5 en negatiu):

2. TypeError: intentar modificar un caràcter — els textos a Python són immutables: no es pot canviar un caràcter de forma directa. Per modificar-ne una part, has de construir un text nou (per exemple, amb .replace() o concatenació):

3. Oblidar que .split() retorna una llista, no una cadena — si intentes fer un slice o cridar un mètode de text sobre el resultat de .split(), obtindràs un error:

Exercici

Escriu un programa que llegeixi una paraula i mostri quantes vocals (a, e, i, o, u) conté. El programa ha de funcionar tant amb majúscules com amb minúscules.

Per exemple, amb la paraula Universitat la sortida ha de ser 5, i amb hola ha de ser 2.

Pista: converteix la paraula a minúscules amb .lower() abans de comptar, i recorre-la caràcter a caràcter amb for. (Per simplificar, aquest exercici no compta les vocals amb accent — només les vocals sense accent.)

Resum

  • text[i] accedeix al caràcter de la posició i; els índexs negatius compten des del final (text[-1] és l'últim).
  • len(text) retorna el nombre de caràcters del text.
  • text[inici:fi] retorna un fragment (la fi no s'inclou); text[::-1] inverteix la cadena.
  • Els mètodes .upper(), .lower(), .strip(), .replace() i .split() retornen un text nou sense modificar l'original.
  • in comprova si una subcadena és dins d'un text; .startswith() i .endswith() comproven els extrems.
  • Pots recórrer cada caràcter d'un text amb for c in text:, igual que iteraries sobre una seqüència de nombres.