Tema 4: Strings

Objectius i argument

En els tres primers temes s'han exposat de manera ràpida però aplicable els elements més bàsics d'un llenguatge de programació. Aquests tres temes junts conformen el primer bloc temàtic del curs. El bloc que s'enceta amb aquest tema afegeix damunt dels anteriors els elements més bàsics d'emmagatzemat d'informació. Després d'aquest segon bloc, la potència dels elements disponibles és molt considerable.

Per encetar el bloc, aquest tema es dedica als strings. Aquests, a banda del seu interès inherent,  són els representants de dos conceptes importants en Python: les seqüències i els tipus immutables.

Resultats d'aprenentatge

En haver assolit el tema una estudianta ha de poder:

  • Descriure, classificar i diferenciar els diferents tipus predefinits vistos fins ara.
  • Dissenyar i implementar algoritmes que manipulin strings en que intervinguin una iteració (en alguns casos dues aniuades), i els condicionals necessaris.
  • Entendre el concepte d'índex i d'operador d'accés.
  • Entendre el concepte de recorregut (someramen) i com l'iterador for simplifica la tasca.
  • Entendre el concepte d'immutable i les conseqüències que comporta sobre un tipus de dades.
  • Conèixer i ser capaç de treure profit de les principals operacions per treballar amb strings.
  • Saber com consultar en manual de referència de Pyhton via web.

Conceptes clau

String, tipus estructurat (en contraposició a simple), índex, operació d'accés, llesca (slice), recorregut (traversal), operador de pertanyença, immutabilitat, paràmetres opcionals d'una funció, valors per omisió (default), mòdul string, operador de format d'strings

Referència principal

  • How to Think Like a Computer Scientist: Learning with Python 2nd Edition: (capítol 7). Teniu una traducció preliminar a la carpeta d'apunts.

Referències complementàries

Exercicis obligatoris de teoria

EOT 4.1

Encapsuleu el següent fragment de codi

cadena = "prova"
compta = 0
for char in cadena:
if char == 'a':
compta = compta + 1
print compta
De tal manera que obtingueu una funció anomenada compta_lletres, i generalitzeu-la per què accepti la cadena i el caràcter com a paràmetres.

EOT 4.2

Dissenyeu una funció que, donada una cadena, retorni el nombre de dígits que conté.

EOT 4.3

Dissenyeu una funció que, donada una cadena, substitueixi tots els caràcters 'a' per 'A' (sense fer servir la funció replace).

EOT 4.4

Dissenyeu una funció que, donades dues cadenes, retorni el nombre d'aparicions de la segona cadena en la primera. Per exemple, donades les cadenes "pararapapa" i "pa", la funció hauria de retornar 3.

EOT 4.5

Dissenyeu una funció que, donada una cadena, retorni aquesta mateixa cadena escrita al revés. Per exemple, donada la cadena "Hola", la funció hauria de retornar "aloH".

EOT 4.6

Dissenyeu un programa que demani una cadena a l'usuari i, després, elimini totes les vocals. A continuació, el programa ha de demanar dos enters a l'usuari per tal d'obtenir la subcadena entre els índexos donats i, finalment, ha d'escriure per pantalla la cadena resultant, havent afegit cada tres caràcters la cadena "bogeria". Un exemple de funcionament podria ser:

Introdueix una cadena: "python mola molt"
El primer pas genera: pythn ml mlt

Introdueix el primer index de la subcadena: 3
Introdueix el segon index de la subcadena: 11
El segon pas genera: hn ml ml

La teva cadena resultant es: hn bogeriaml bogeriaml

EOT 4.7

Les següents cadenes formatades tenen errors. Arregleu-los:

  1. “%s %s %s %s” % (‘aquest’, ‘aquell’, ‘algun’)
  2. “%s %s %s” % (‘si’, ‘no’, ‘dalt’, ‘baix’)
  3. “%d %f %f” % (3, 3, ‘tres’)

Exercicis obligatoris de laboratori

EOL 4.1

Es demana que dissenyeu un programa que llegeixi un text escrit en català (sense accents ni altres caràcters que no siguin lletres) i el torni a escriure en format SMS. Per exemple, si l'usuari del programa escriu:

Hola que tal per on passeu

Hauria d'escriure

ola ke tl x n paseu

A tal efecte, considereu els següents canvis a fer sobre l'string (en l'ordre indicat):

En els mots que comencen per H Suprimir l'h
Les síl·labes "que" o "qui" canviar-les per "ke" o "ki"
Les síl·labes "per" Canviar-les per "x"
En els monosíl·labs d'una sola vocal i com a mínim 2 lletres.*
Suprimir la vocal
Les dobles s Simplificar-les amb una sola s

* Naturalment "ke" o "ki" no s'han de substituïr.

A tal efecte, feu servir aquells elements de la llibreria string que us siguin útils i organitzeu el codi en funcions (per exemple, una funció per a cada canvi possible). Feu ús dels doctests per documentar i testejar el programa. Procediu de manera incremental. Primer un programa que només fa un canvi, despres un que en fa dos, i així successivament.

Considereu que un monosíl·lab és un mot que només té una vocal.

Exercicis optatius

EOP 4.1

Imagineu que treballeu per un departament de bioinformàtica i us demanen que busqueu en cadedes d'ADN ( com la de l'Albumina, proteïna indicadora de desnutrició ) un patro per detectar si aquesta té algun problema:

Cal fer una funció per trobar si hi ha la cadena: 'ggttaacaaOOggtttca' on OO poden ser qualsevol nucleotids ( g/t/c/a )

EOP 4.2

Seguint amb l'estudi de la proteïna ara ens demanen que busquem si existeix una cadena de 16 caracters on els 8 primers siguin mirall dels 8 següents.

EOP 4.3

Feu una funció que comprovi si una paraula es cap-i-cua.

def es_capicua(s):
"""
>>> es_capicua('abba')
True
>>> es_capicua('abab')
False
>>> es_capicua('tenet')
True
>>> es_capicua('banana')
False
>>> es_capicua('straw warts')
True
"""

EOP 4.4

Feu un programa que passi qualsevol paraula escrita a majuscules.

EOP 4.5

Feu un programa que demani paraules a l'usuari fins que escrigui la paraula fi. Cada cop que l'usuari escriu una nova paraula cal imprimir per pantalla totes les anteriors seguida de la última escrita.