# str ja ho porta tot

Cadenes en Python

A diferència de C, una cadena ja és un tipus complet amb els seus propis mètodes — sense vectors, sense '\0', i es pot recórrer directament.

Una cadena ja és un tipus complet

A C una cadena era un vector de char amb un '\0' al final, i calia una funció per a cada operació. En Python, str ja porta tot això incorporat.

Llargada i concatenació

nom = "Jordi"
salutacio = "Hola, "

print(f"Llargada: {len(nom)}")
salutacio = salutacio + nom
print(f"{salutacio}!")

len() substitueix strlen(), i + substitueix strcat() — sense preocupar-te mai de si hi ha prou espai reservat: Python ho gestiona tot sol.

Mètodes útils de str

MètodeFa
s.upper() / s.lower()retorna una còpia en majúscules / minúscules
s.strip()treu espais (o salts de línia) del principi i del final
s.replace(a, b)retorna una còpia amb totes les a canviades per b
s.split()divideix la cadena en una llista de trossos
s.find(x)posició de la primera aparició de x (-1 si no hi és)
s.count(x)quantes vegades apareix x

Cap d'aquests mètodes modifica s: les cadenes, igual que les tuples, són immutables en Python — sempre en retornen una de nova.

Comparar cadenes

Exemple

a = "gat"
b = "gos"

if a == b:
    print("Són iguals")
elif a < b:
    print(f"{a} va abans que {b}")
else:
    print(f"{b} va abans que {a}")

Sense cap strcmp(): ==, < i > ja funcionen directament sobre cadenes, comparant-les alfabèticament.

Recórrer una cadena

Sense índexs ni caràcter de final: una cadena ja és una seqüència, i es recorre com qualsevol altra.

Exemple: comptar vocals

paraula = "programar"
comptador = 0

for lletra in paraula:
    if lletra in "aeiou":
        comptador += 1

print(f"Vocals: {comptador}")

Compara-ho amb la versió de C: allà calia un índex i i comprovar paraula[i] != '\0' a cada volta. Aquí for lletra in paraula: ja dona cada caràcter directament, un per un.

Bonus: aquest comptatge concret també es pot escriure en una sola línia: sum(1 for lletra in paraula if lletra in "aeiou"), o fins i tot sumant paraula.count(v) per a cada vocal v.

Mira la cadena processar-se pas a pas

Al recorregut, fixa't que no fa falta cap índex: cada volta et dona directament el caràcter següent.

Operacions bàsiques

Iteració directa

Codi

Variables

NomValor

Cadena

Terminal

Pas 1 / 1

Problemes per resoldre

Sense solució ni comprovació automàtica: escriu el programa, executa'l (python3 programa.py) i prova'l amb els exemples. Les pistes són plegades perquè les obris només si les necessites.

1. Invertir una cadena

Escriu un programa que inverteixi una cadena fixa escrita al codi, sense fer servir la llesca [::-1] (fes-ho amb un bucle, per practicar).

Original: Python
Invertida: nohtyP
Pistes

Com que una cadena és immutable, no pots canviar-ne un caràcter en el lloc: construeix-ne una de nova recorrent l'original de darrere cap endavant i anant-hi afegint caràcters (nova = nova + lletra).

A la pràctica, en codi real simplement escriuries paraula[::-1] — una llesca amb pas -1. Un cop t'hagi sortit amb el bucle, prova-la i comprova que dona el mateix resultat.

2. Comptar ocurrències d'una lletra

Demana una paraula i una lletra, i digues quantes vegades apareix aquella lletra a la paraula.

Paraula: anagrama
Lletra: a
Apareix 4 vegades
Pistes

Fes-ho primer amb un bucle (for c in paraula: if c == lletra: ...), per practicar el recorregut.

Un cop funcioni, compara-ho amb fer-ho directament amb paraula.count(lletra) — la versió idiomàtica en Python.

3. És un palíndrom?

Demana una paraula i digues si és un palíndrom (es llegeix igual del dret que del revés), com "radar".

Paraula: radar
És un palíndrom
Pistes

La manera més directa en Python: compara la paraula amb ella mateixa invertida — paraula == paraula[::-1].

Si vols practicar el recorregut manual (com a l'exercici 1), també ho pots fer amb dos índexs que s'acosten des dels extrems, igual que a la versió de C.

Exercicis d'autoavaluació

Aquests es generen amb valors nous a l'atzar i tenen solució comprovable.

—

Quina serà la sortida per terminal d'aquest programa?