Tema 3. Strings en Python
Explicación del uso de cadenas de texto en Python 3.
Variable string
String. Cadena ordenada de caracteres.
Una variable de tipo string es aquella que guarda un string. Cuando queremos que una variable se trate de una variable de tipo string, str
en Python
, a la hora de declararla, el contenido de la variable debe ir o bien entre comillas dobles " "
, o bien entre comillas simples ' '
.
¡Cuidado! Python
no trabaja bien con los acentos. Por tanto, aunque no esté del todo bien escrito, mejor evitarlos, pues nos ahorraremos muchos problemas.
String literals
El hecho de que el contenido de las variables de tipo str
vaya entre comillas, ya sean simples o dobles, conlleva a que algunos caracteres deban ser tratados de forma especial.
Aquí entran en juego los string literals. Algunos de los más utilizados se muestran en la siguiente tabla:
\\
Backslash, \
\'
Comilla simple, '
\"
Comilla doble, "
\n
Salto de línea
\t
Tabulación horizontal
Para más información acerca de los string literals ir a la documentación.
Ejemplo 1
Si queremos guardar en una variable el siguiente texto,
Juan dijo: "me gusta el chocolate"
lo tendremos que hacer del siguiente modo
Observación. Si usamos comillas dobles, para guardar la frase de este ejemplo necesitaremos usar string literals, ya que si no nos saltará error. Sin embargo, si usamos comillas simples, para guardar la frase de este ejemplo en una variable no hace falta que cambiemos nada.
Ejemplo 2
Si queremos guardar en una variable el siguiente texto,
Ricardo dijo: 'me gusta la playa'
lo tendremos que hacer del siguiente modo
Observación. Si usamos comillas dobles, para guardar la frase de este ejemplo no necesitaremos usar string literals. Sin embargo, si usamos comillas simples, para guardar la frase de este ejemplo en una variable tendremos que usar string literals, porque si no nos saltará un error.
Ejemplo 3
Si queremos guardar en una variable el siguiente texto y que se conserve el salto de línea,
Con diez cañones por banda,
viento en popa a toda vela
lo tendremos que hacer del siguiente modo
Observación. El resultado con el salto de línea aplicado lo veremos cuando hablemos de la función print()
, cosa que haremos más adelante en esta sección.
Concatenación de strings
La concatenación es una operación que une dos o más strings en uno solo.
En Python
, para concatenar dos variables de tipo string usamos la función +
.
Observación. La concatenación viene a ser como pegar el final del primer string con el princio del segundo. Entonces, conviene poner un espacio al final de la primera variable a concatenar, o bien al principio de la segunda para que así, al realizar la concatenación, exista ese espacio entre las palabras.
De no añadir espacios adicionales, obtendríamos resultados como el mostrado en el siguiente chunk:
Si dejamos un espacio adicional al final del string s1
, obtenemos
Si dejamos un espacio adicional al principio del string s2
obtenemos
Si dejamos un espacio adicional tanto al final del string s1
como al principio del string s2
obtenemos
Si dejamos más de un espacio adicional ya sea al final del string s1
como al principio del string s2
obtenemos
Observación. El número de espacios añadidos se conserva. Más adelante en esta sección veremos como eliminar los posibles espacios en blanco sobrantes.
Repetición de strings
La repetición es una operación que repite la variable string tantas veces como indiquemos.
En Python
, para repetir una variable de tipo string usamos la función *
. El orden de los factores no altera el producto. Es decir, tanto da usar la sintaxis num_repeticiones * variable_str
como variable_str * num__repeticiones
.
Observación. Al igual que ocurría con la concatenación, hay que añadir manualmente uno o más espacios en blanco al principio o al final del string para que las repeticiones no estén pegadas las unas a las otras, tal y como ocurre en el siguiente chunk de código.
Funciones básicas
La función print()
print()
Hasta ahora, cada vez que mostrábamos strings por pantalla, estos salían entre comillas simples.
La función print()
nos sirve, entre otras muchas cosas, para mostrar strings por pantalla.
Observación. Como véis, una de las principales diferencias entre usar la función print()
o no usarla es que a la hora de mostrar la cadena de caracteres por pantalla, ésta no va entre comillas simples y el formato en que se imprime también es diferente.
No solamente podemos imprimir strings, sino que podemos mostrar el resultado de cualquier variable (numérica o de tipo string)
Al igual que podíamos concatenar strings con la función +
, combinando ésta junto con la función print()
podemos concatenar strings con variables que almacenan strings
Observación. Recordad introducir un espacio adicional siempre que vayáis a concatenar cualquier cosa (strings con strings, strings con variables...), para que así el resultado quede legible.
Observación. Utilizando la función print()
, el uso de acentos o de algunos caracteres especiales como ¿
o ¡
ya no dan problemas a la hora de mostrarse por pantalla. Ésto se debe a que con la función print, python procesa el texto y lo muestra de la manera que se espera.
Observación. Podemos obtener exactamente el mismo resultado utilizando comas (,
) en vez de la función +
. Eso sí, después de cada coma se nos añade automáticamente un espacio en blanco que no siempre buscamos, como ocurre a continuación después del resultado de la variable name
.
Al igual que podíamos repetir un mismo string un número cualquiera de veces con la función *
, combinando ésta junto con la función print()
podemos multiplicar un string o variables que contengan strings
Ejercicio 1: Cumpleaños Feliz
Vamos a combinar concatenación y repetición de strings para reproducir la canción "Cumpleaños feliz"
La función str()
str()
La función str()
sirve para convertir cualquier variable a tipo string. A esto se le llama casting.
Con la función str()
, podemos concatenar strings y variables de cualquier tipo dentro de un print()
:
Formateo de Strings
El método .format()
.format()
Existe otra forma de concatenar strings y variables de cualquier tipo dentro de un print()
y es gracias al método .format()
.
Lo que hay que hacer es indicar con llaves, {}
, donde queremos situar el resultado de las variables y luego, dentro de los paréntesis del método .format()
, indicar las variables en su respectivo orden entre paréntesis.
Formated Strings o f-strings
Otra forma de formatear nuestras strings en añadir una f
o F
justo antes de nuestra string. Así podemos utilizar las llaves, {}
, dentro de nuestro string sin necesidad de llamar al método .format
.
Utilizando este sistema además podemos utilizar de manera muy sencilla los operadores de formateo
(que veremos a continuación). Solamente necesitamos poner :
y a continuación el operador que queramos utilizar.
De la misma manera, si queremos utilizar una variable dentro de otra, por ejemplo como operador de formateo
o como método
, solo tenemos que colocarla entre {}
dentro del anterior.
Se puede especificar el símbolo =
, de tal manera que al utilizarlo veremos el nombre de la variable y su contenido.
Por último, para especificar una conversión podemos utilizar el operador !
. De esta manera podemos obtener varios resultados:
!s
: convierte el contenido de una variable a string. Es igual questr()
.!
r
: muestra una representación imprimible de un objeto. Es igual querepr()
.!a
: convierte el contenido de una variable a ascii. Es igual queascci()
.
Interpolación de cadenas
Otra forma de formatear las cadenas es utilizando el operador de porcentaje %
. Éste operador se denomina operador de formato de cadena o de interpolación.
Ésta forma de trabajar con texto se conoce tambien como formato de estilo C, ya que se originó en dicho lenguaje de programación. Tambien se puede ver como formato posicional simple.
El operador le dice al intérprete de Python que formatee una cadena usando un conjunto dado de variables, encerradas en una tupla, siguiendo al operador.
El intérprete de Python sustituye la primera aparición de %s
en la cadena por la cadena dada "Raúl", y el segundo %d
por el número "100". Los porcentajes en la cadena son en realidad marcadores de posición en nuestra cadena de «plantilla» e indican que las cadenas se colocarán allí.
%c
carácter
%s
string
%i %d
entero decimal con signo
%u
entero decimal sin signo
%o
entero octal
%x
hexadecimal con letras minúsculas
%X
hexadecimal con letras mayúsculas
%f
numero real de coma flotante (%.2f para dos decimales)
Utilizando la Interpolación de cadenas no se pueden utilizar los operadores de formateo que se exponen a continuación.
Sin embargo, existe una forma propia de formatear dichas cadenas.
Operadores de Formateo
Los operadores de formateo se utilizan entre las llaves, {}
, de una f-string
para formatear la prestación de los valores. Tambien se pueden pasar directamente al método format()
.
Se pueden dividir de la siguiente manera (según el manual oficial de Python):
fill
align
Indicando el operador necesario podremos alinear el string donde queramos:
<
: Alineación a la izquierda.^
: Alineación al centro.>
: Alineación a la derecha. Por defecto.=
: Alineación espaciando el signo (si lo hay) del resultado. Solo valido para numerales.
sign
Solo válida para numerales y puede ser:
+
: Utilizar signo en ambos, positivos y negativos.-
: Utilizar signo solamente en negativos.space
:Utilizar signo en los negativos y un espacio en los positivos.
#
Convierte el contenido de la variable a la forma alterna. Solo válido para integer
, float
y complex
.
En el caso de variable tipo integer
, cuando el output es binario, octal o hexadecimal añade a la salida el prefijo 0b
, 0o
o 0x
respectivamente.
En el caso de variables tipo float
o complex
, añade la coma decimal al output aunque no sea necesaria.
width
Indicando un número podemos hacer que la salida ocupe como mínimo esa cantidad de espacios.
grouping_option
Permite cambiar el cáracter que se utilizamos como separador. Puede ser:
,
: Utiliza la coma para separar los miles._
: Utiliza la barra baja para separar los miles.
.precision
Es un punto seguido de un integer que indica la precisión máxima de la respuesta:
type
Muestra dentro de cada tipo de dato básico, el tipo específico de dato que estamos utilizando.
Como hay muchos y no son usados habitualmente, pueden verlos en el enlace a continuación.
Saltos de línea y tabulaciones
Si recordáis el ejemplo 3, teníamos la variable s3
, que contenía un salto de línea
Con la función print(), seremos capaces de visualizar dicho salto de línea
Y lo mismo ocurriría con la tabulación horizontal.
Substrings
Para acceder a un caracter de una variable string usamos la sintaxis de []
¡Cuidado! En Python
, los índices siempre empiezan en 0, al contrario de lo que ocurre con otros lenguajes de programación, como por ejemplo R
.
Si precedemos el índice por un -
, entonces empezamos desde el final
Si queremos acceder a varios caracteres seguidos, podemos utilizar la función :
¡Cuidado! En Python
, siempre que usemos la función :
, el índice que se encuentra a la derecha nunca es incluido, tal y como hemos visto en los ejemplos anteriores.
Si precedemos por -
al índice de la izquierda de :
y no ponemos ninguno a su derecha, lo que hacemos es obtener los últimos elementos. No se puede acceder al -0, se accede al -1 como último elemento.
Si al contrario, precedemos por -
al índice de la derecha, sin poner ningún índice a la izquierda de :
, obtendremos todos los elementos salvo el número de elementos del final indicados por el índice (recordemos que si precedíamos por -
, los índices empezaban desde el final).
Estos substrings pueden contar con un tercer elemento que marca los espaciosa saltar desde el punto inicial al punto inicial.
string[1:5:1]
implicará desde la segunda posición (1) hasta la quinta (4) de uno en uno.
Revertir un string
Puesto que en Python no existe un método .reverse() para las strings, podemos utilizar una substring que vaya desde el primer caracter hasta el último con un salto de -1. Así conseguimos el efecto de reverse string.
PE: string[::-1]
equivale a gnirts
Métodos para trabajar con strings
El método .lower()
nos transforma el string que indiquemos a minúsculas.
El método .upper()
, por el contrario, lo transforma a mayúsculas.
El método .count()
cuenta cuántas veces aparece una letra o un string dentro del string al cuál le aplicamos dicho método.
El método .capitalize()
convierte a mayúscula el primer caracter de un string.
El método .title()
convierte a mayúscula el primer caracter de cada palabra de un string.
El método .swapcase()
convierte a mayúscula las minúsculas y viceversa.
El método .replace()
reemplaza el caracter (o caracteres) que le indiquemos por el string que queramos.
El método .split()
rompe el string en el caracter que le indiquemos y elimina dicho caracter.
El método .strip()
elimina los espacios sobrantes a principio y final del string.
El método .rstrip()
elimina los espacios sobrantes al final del string.
El método .lstrip() elimina los espacios sobrantes al principio del string.
El método .find()
busca el carácter que indiquemos y nos devuelve la primera posición en la que aparece (empezando por 0).
Si le pedimos buscar un conjunto de caracteres, nos devuelve la posición del primer carácter de dicho conjunto
El método .find()
tiene otros dos parámetros de uso opcional: start
y end
, que sirven para indicar donde queremos que empiece la búsqueda y donde queremos que acabe.
El método .index()
busca el carácter que indiquemos y nos devuelve la primera posición en la que aparece.
Si le pedimos buscar un conjunto de caracteres, nos devuelve la posición del primer carácter de dicho conjunto
El método .index()
tiene otros dos parámetros de uso opcional: start
y end
, que sirven para indicar donde queremos que empiece la búsqueda y donde queremos que acabe.
Observación. Observemos que los métodos .index()
y .find()
son casi idénticos. El único punto en que difieren es que si el carácter indicado no se encuentra en el string, el método .index()
arroja error, mientras que .find()
arroja el índice -1.
El método .rindex()
busca el carácter que indiquemos y devuelve el último indice en el que fue encontrado.
También consta de los dos parámetros de uso opcional: start
y end
, que sirven para indicar donde queremos que empiece la búsqueda y donde queremos que acabe.
Otras funciones a tener en cuenta
La función len()
nos devuelve el número de caracteres del string.
Observación. Los espacios en blanco también son caracteres, por lo que éstos también son incluidos al contar el número de caracteres de los que consta un string.
Si tenemos un número en formato string, por mucho que sea un número para nosotros, en realidad Python
no lo ve así. El gran problema es cuando queremos operar con un número que se encuentra en formato string. Ahí es donde entran en juego las funciones int()
y float()
, que lo que hacen es convertir a formato integer o float, respectivamente.
En este caso, pasamos a formato integer:
En este otro caso, pasamos a formato float:
La función input()
sirve para que el usuario introduzca un string por consola:
Aquí también nos serán útiles las funciones int()
y float()
, pues si en vez del nombre queremos que el usuario nos indique su edad o su altura, querremos tratar dichos valores como números. Entonces, haríamos lo siguiente
Ejercicio 2: substrings y eliminación de palabras.
Dado un string, vamos a pedir al usuario que introduzca una palabra perteneciente a dicho string y vamos a obtener el substring sin la palabra indicada por el usuario utilizando el método .find()
y la función len()
Ejercicio 3: personalizar la canción de cumpleaños feliz
Vamos a aprovechar el ejercicio sobre la canción "Cumpleaños feliz" y vamos a permitir al usuario elegir a quien va dirigida la canción
Ejercicio 4: Metodos variados
Vamos a pedirle al usuario palabras o frases y le vamos a devolver el mismo string modificado con alguno de los métodos aprendidos según se indique:
Devolver la palabra en mayúscula
Devolver la frase con todas las palabras empezando en mayúscula
Devolver la palabra (con 3 o más letras) con todas las letras en minúscula salvo la tercera letra
Devolver la palabra con todas las letras en mayúsculas salvo la primera y la última
Devolver la frase donde cada vez que aparezcan las dos primeras letras de la primera palabra, sean substituidas por cualesquiera otras dos letras.
Ejercicio 5: Años de vida
Vamos a pedirle al usuario su año de nacimiento y el año actual y le vamos a imprimir por pantalla su edad
Repaso
Last updated