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
- El manual de Python en allò que fa referència al strings: les operacions predefinides, el formatat d'strings i la llibreria de mètodes per strings.
- Un dels temes importants relacionat amb els strings és el de la codificació dels caracters: com s'emmagatzemen els caràcters en el computador? Aquest Document resum us pot ajudar a entendre-ho. També la referència de la wikipèdia
- També la entrada de la wikipedia sobre la codificació de caracters us pot ajudar .
Exercicis obligatoris de teoria
EOT 4.1
Encapsuleu el següent fragment de codi
cadena = "prova"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.
compta = 0
for char in cadena:
if char == 'a':
compta = compta + 1
print compta
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:
- “%s %s %s %s” % (‘aquest’, ‘aquell’, ‘algun’)
- “%s %s %s” % (‘si’, ‘no’, ‘dalt’, ‘baix’)
- “%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.