Capítol 7

Treballant amb text

Una cadena de text (en anglès, string) és una seqüència de caràcters.
Aprendràs a tallar un text i a transformar-lo. També sabràs com accedir als caràcters que el formen.

Com podem accedir a un caràcter

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:

Pots modificar el codi següent, per explorar com funciona:

Llargada d'un text

La funció len() retorna el nombre de caràcters d'un text, amb els espais també comptats:

Retallar un fragment de text

En lloc d'agafar un sol caràcter, pots agafar un tros del text indicant inici i fi separats per :.
Atenció, tingues en compte que l'últim caràcter serà fi - 1

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 el signe punt, d'aquesta manera: text.metode(). Cap d'ells modifica el text original, sinó que semper retornen un text nou. Amb aquests exemples es veurà més clar:

.upper(): converteix un text a majúscules .lower(): converteix un text a minúscules

.strip(): elimina els espais en blanc (i salts de línia) dels extrems. Això és molt útil per a poder netejar l'entrada d'una persona usuària:

.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é, a dins, una informació que nosaltres proporcionem

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 la informació d'un text fent servir la instrucció for

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

En aquest exemple que veuràs, comptarem 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.

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, prova el teu programa amb paraules que no duen vocals accentuades.)

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 passa amb una seqüència de nombres.