curso de python

6 - Strings

En la mayoría de los campos de la programación trabajamos procesando texto, ya sea para almacenar información dada por los usuarios o capturada desde diferentes sitios para procesar esa información para sacar algo de ella.
Las colecciones de Texto en python se llaman strings y las funciones especiales que se utilizan para trabajar con ellas se llaman string methods y nos sirven para convertir un texto a mayúsculas, minúsculas, eliminar espacios blancos al inicio o final de un texto o sustitur partes de un texto por otro.



El tipo de dato string o string data type

Los strings son uno de los tipos de datos fundamentales de Python y son utilizados para representar texto. Decimos que es un tipo de dato fundamental ya que este no puede ser descompuesto en otros valores más pequeños de un tipo distinto. No todos los tipos de datos son fundamentales, pero eso lo veremos mucho más adelante con los tipos de datos compuestos.

El tipo string tiene una abreviación especial en python, str. Puedes ver esto utilizando la función type(), que se utiliza para determinar el tipo de dato del valor que se pase por parametro.

>>> type("hola, mundo")
<class 'str'>

el output <class 'str'> indica que el valor "hola, mundo" es una instancia del tipo de dato str, es decir, "hola, mundo" es un string.

Podrás notar que también hay otra palabra especial por ahí, class, por ahora, puedes entender esta palabra como un sinónimo de tipo de dato o data type, aunque se refiere a algo mucho más específico, no hablaremos de eso hasta mucho más adelante en el curso.

los strings tienen tres propiedades que iremos viendo poco a poco:

  • contienen caracteres o characters que son letras o símbolos
  • tienen un tamaño o length que es el numero de caracteres del string
  • los caracteres en un string aparecen en una secuencia es decir, cada caracter tiene una posición numerada


String literals

Como ya hemos visto, puedes crear un string rodeando algo por comillas dobles (") o comillas simples ('):

string1 = "hola mundo"
string2 = '1234'

Sin importar si usas comillas dobles o simples, ambos siguen siendo lo mismo.
Cuando creas un string rodeandolo por comillas, el texto es llamado string literal. El nombre indica que el string es literalmente escrito en tu código, por ejemplo, todos los strings que hemos visto hasta ahora, son string literals.

Pero no todos los strings en un programa son string literals, un ejemplo sería texto ingresado por el usuario o leído desde un archivo, hablaremos de eso más adelante en el curso.

Las comillas que rodean al texto de un string son llamados delimiters o delimitadores, ya que le dicen a Python donde empieza y donde termina un string. Cuando usas un tipo de comillas, ese mismo tipo de comilla debe ser usado para el inicio y el final, por lo que, puedes usar el otro tipo de comilla dentro:

string3 = "we're number 1"
string4 = 'Y AC dijo: "hágase la luz"'

Una vez Python lee el primer delimitador, considera todo lo que está a su derecha como parte del string, hasta que encuentra otro delimitador que sea el mismo tipo de comilla que el primero, es por eso que el ejemplo anterior funciona. Utilizar el mismo tipo de comilla causará un SyntaxError ya que al encontrarse con el segundo delimitador, no sabrá interpretar el resto del código.

Uno de los pequeños errores más comunes es el uso mezclado de comillas dobles y simples constante. Cuando trabajas en un proyecto, es una buena idea utilizar solo comillas simples o dobles para cualquier string a menos que sea completamente necesario el uso del otro tipo de comilla.

Ten en mente que realmente no hay una elección correcta o incorrecta, la verdadera meta es ser consistente ya que la consistencia ayuda a que tu código sea más fácil de leer, es un favor para la gente que lea tu código, incluyéndote.



Determinar el tamaño de un string

La cantidad de caracteres (incluidos espacios) en un string es conocido como length, por ejemplo, el string 'abcd' tiene un length o tamaño de 4, y el string 'Hola mundo' tiene un tamaño de 10.

Para determinar el length de un string puedes usar la función len():

>>> len('abcd')
4

también puedes usar la función len() para obtener el tamaño de un string asignado a una variable:

>>> letras = 'abcd'
>>> num_letras = len(letras)
>>> num_letras
4

primero, el string 'abcd' es asignado a la variable letras, entonces se utiliza la función len() para conseguir el tamaño del string y almacenarlo en la variable num_letras y finalmente, el valor de num_letras es 4 y es mostrado.



Strings multilinea

la guía de estilos PEP8 recomienda que cada linea en el código Python no contenga más de 79 caracteres, incluyendo espacios.

Esto se recomienda porque, entre muchas otras razones, hace que sea más fácil de leer dos archivos uno a un lado de otro. En cualquier caso, muchos programadores creen que forzar a que el código tenga un máximo de 79 caracteres por linea puede hacer que sea difícil de leer por si mismo algunas veces.

Esto lo comento ya que, en la vida real, encontrarás muchos programas que pasan este limite y otros que lo siguen de manera rigurosa. En lo personal creo que todas estas recomendaciones deben ser eso, recomendaciones y nada más, sigue tu propio criterio y sí crees que pasarte un par de caracteres puede hacer que sea más fácil leer tu código, entonces hazlo, pero dentro de lo posible, sigue las recomendaciones a menos que no sea conveniente.
La legibilidad ante todo.

En cualquier caso, ya sea que decidas seguir las recomendaciones a rajatabla o ponerte un limite de caracteres mayor, de vez en cuando puede que te veas en la necesidad de crear strings mucho, mucho, mucho más largos que el limite que te hayas puesto.

Para trabajar con estros string literals tan largos, Python nos ofrece varias opciones para trabajar con strings multilinea

para explicar estas distintas formas, hagamoslo con ejemplos, el primero un parrafo de Cronicas Marcianas de Ray Bradbury

parrafo = "Stendahl mojó un ladrillo en el mortero, cantando entre dientes. \
Ahora había golpes y gritos y llantos en la celda cada vez más oscura. La \
pared crecía lentamente.- Un poco más de ruido, por favor - dijo Stendahl -. \
Representemos bien la escena.- ¡Déjenme salir! ¡Déjeme salir! Sólo faltaba \
un ladrillo. Los gritos eran ahora continuos.- ¿Garrett? - llamó Stendahl. \
en voz baja. Garrett calló -. ¿Sabe usted por qué le hagoesto? Porque quemó \
los libros del señor Poe sin haberlo leído. Le bastó la opinión de los \
demás. Si hubiera leído los libros, habría adivinado lo que yo le iba a \
hacer, cuandobajamos hace un momento. La ignorancia es fatal, señor Garrett."

El uso de las barras invertidas (\) nos permite indicar al interprete que habrá un salto de linea que debe ser ignorado, y que la siguiente linea forma parte del mismo string, es decir, aunque en el código se escriba con multiples lineas, si impimimos la variable parrafo, veremos que se mantiene como una sola linea.

Ahora un ejemplo con un poema, El Suicida de Jorge Luis Borges:

poema = """No quedará en la noche una estrella.
No quedará la noche.
Moriré y conmigo la suma
del intolerable universo.
Borraré las pirámides, las medallas,
los continentes y las caras.
Borraré la acumulación del pasado.
Haré polvo la historia, polvo el polvo.
Estoy mirando el último poniente.
Oigo el último pájaro.
Lego la nada a nadie."""

En este caso utilizamos tres comillas dobles, aunque también puede hacerse con comillas simples, además esta manera de realizar un string multilinea, mantiene los espacios, por lo que si pones espacios extra del lado izquierdo de alguna de las lineas, estas se mantendrán.

Es importante recalcar una cosa, y es que los strings con tres comillas tienen un proposito especial en Python y es que son utilizados para documentar el código. Usualmente puedes encontrarlo en la parte superior de un archivo .py con una descripción del código, del mismo modo, también son utilizados para documentar funciones. Cuando los strings con triple comilla son utilizados para documentar código, se les llama docstrings, hablaremos de eso un poco más a fondo más adelante en el curso.



Por ahora, creo que esto es más que suficiente para un solo post, en el siguiente veremos concatenación, indexación y slicing de un string, pero por ahora, un par de ejercicios sencillos mientras tanto:

  • Imprimir un string que use comillas dobles dentro de un string.
  • Imprimir un string que use un apóstrofo o comilla simple dentro de un string.
  • Imprimir un string multilinea que preserve sus espacios blancos a los lados de cada linea.
  • Imprimir un string que haya sido programado con multilinea, pero que se muestre como una sola linea.