sábado, 19 de marzo de 2016

Python IV (usar cadenas)

Este es otro post dedicado a programación en Python, encontraréis todos los posts de este tipo juntos en el apartado Programación del blog. Y si queréis aprender más podéis visitar la web oficial de www.python.org

Hoy vamos a ver como trabajar con cadenas en python, este post es un poco más extenso que los anteriores pero creo que es importante tener claro estos aspectos.

1.1 Crear variables de cadena


Tal y como vimos en el ejercicio anterior para asignar una cadena podemos usar dos métodos, con comillas simples y con comillas dobles.

# Variable de cadena encerrada en comillas dobles
var_Cadena1="abc"
print(var_Cadena1)
# Variable de cadena encerrada en comillas simples
var_Cadena2='abc'
print(var_Cadena2)

las dos líneas de código que tenemos arriba ofrecen el mismo resultado, sin embargo en el caso que dentro de nuestra cadena tengamos que usar comillas dobles o simples, usaremos para encerrar la cadena el tipo de comillas que no están dentro de nuestra cadena, por ejemplo

# Variable de cadena encerrada en comillas dobles
var_Cadena1='Lucia es muy "inteligente" cuando le conviene'
print(var_Cadena1)
# Variable de cadena encerrada en comillas simples
var_Cadena2="Lucia es muy 'inteligente' cuando le conviene"
print(var_Cadena2)


1.2 Caracteres de escape en una cadena


En python el carácter de escape para las cadenas es el símbolo \ . Nos sirve para introducir en una cadena caracteres especiales como son, el tabulador, el retorno de línea (salto de línea). Para añadir un tabulador en una línea usaremos \t , y para añadir un salto de línea usaremos \n . Mirad el ejemplo siguiente

# Variable de cadena con tabulación
var_Cadena1='Esta cadena tiene un tabulador \t aquí'
print(var_Cadena1)
# Variable de cadena con salto de linea
var_Cadena2="Esta cadena tiene un salto de línea \n aquí"
print(var_Cadena2)


1.3 Unir cadenas (concatenación)


Para unir dos cadenas en python usaremos el símbolo + . Por ejemplo vamos a unir dos cadenas de texto.

# Definimos dos variables de cadena
var_Cadena1="Abcd"
var_Cadena2="Efgh"
# Unificamos la cadena y la visualizamos por pantalla
var_CadenaUnificada=var_Cadena1 + var_Cadena2
print(var_CadenaUnificada)

es importante recordar que en python solo podemos concatenar cadenas del mismo tipo, no podemos unir una cadena de texto con un número, antes de concatenarlo debemos transformar el número en una cadena.


1.4 Convertir números en cadenas


Si queremos unir una cadena de texto con un número debemos asegurarnos de transformar el número en una cadena con la orden str(). Por ejemplo

# Variable de texto
var_CadenaTexto="Esto es una cadena "
# Variable numérica
var_Numero=123
# Unimos las dos cadenas y las visualizamos por pantalla
var_CadenasUnidas=var_CadenaTexto + str(var_Numero)
print(var_CadenasUnidas)

la instrucción str(var_Numero) es como si hubiésemos definido la variable de esta forma var_Numero="123".
Si no trasformamos en una cadena la variable var_Numero (que contiene un valor numérico) al concatenarlo, python nos mostrará un error al ejecutar el código, como el siguiente


Traceback (most recent call last):
  File "/home/pi/Desktop/test.py", line 4, in <module>
    var_CadenasUnidas=var_CadenaTexto + var_Numero

TypeError: cannot concatenate 'str' and 'int' objects

1.5 Convertir cadenas en números


También podemos realizar la acción contraria, transformar una cadena a un número (para poder realizar operaciones matemáticas), para ello podemos usar principalmente dos funciones, int() y float()

# Variable de texto con un número
var_Texto1="1024"
# Variable de texto con un número negativo
var_Texto2="-1024"
# Variable de texto con un número decimal (hay que usar el punto no la coma)
var_Texto3="0.016"
# Transformacion de las cadenas en números
var_Numero1=int(var_Texto1)
var_Numero2=int(var_Texto2)
var_Numero3=float(var_Texto3)
# Sumamos todos los valores
var_Total=var_Numero1 + var_Numero2 + var_Numero3
# Mostramos el valor total (antes lo transformamos en cadena)
print (str(var_Total))

ahora las variables var_Numero1, var_Numero2 contienen valores numéricos enteros, y var_Numero3 contiene un valor numérico decimal (de punto flotante), y los podemos usar para realizar operaciones matemáticas. Las dos funciones gestionan ellas solas los ceros a la izquierda y los posibles espacios en blanco delante y detrás del número.

A la función int() le podemos añadir un segundo parámetro para cambiar la base numérica del mismo, por defecto trabaja en base diez, pero la podemos modificar, por ejemplo

# Variable numérica
var_Numero="1001"
# Asignamos a una nueva variable el valor 1001 en formato binario
var_NumeroBinario=int(var_Numero,2)
print(var_NumeroBinario)

el código anterior nos muestra el valor binario de 1001


1.6 Averiguar la longitud de una cadena


La función len() nos sirve para devolvernos la longitud de de una cadena (el número de carácteres que tiene)

# Definimos una variable con una cadena
var_Cadena="Nombre"
# Asignamos a una variable la longitud de la cadena y la mostramos por pantalla
var_Longitud=len(var_Cadena)
print(var_Longitud)

el código nos mostrará el valor 6 (la cadena Nombre tiene 6 carácteres)


1.7 Determinar la posición de una cadena o carácter dentro de una cadena


La función find() sirve para determinar que posición ocupa, por ejemplo

# Definimos una variable con una cadena
var_Cadena="Esta es una frase corta"
# Asignamos a una variable la longitud total de la variable
var_Longitud=len(var_Cadena)
print(var_Longitud)
# Buscamos la posición inicial de la palabra frase dentro de la cadena
var_Posicion1=var_Cadena.find("frase")
print(var_Posicion1)

# Definimos una variable con una cadena
var_Cadena="Esta es una frase corta"
# Buscamos la posición inicial de la primera letra t dentro de la cadena
var_Posicion2=var_Cadena.find("t")
print(var_Posicion2)

el código anterior devuelve la longitud total de la cadena (23), la posición inicial de la cadena frase (12), y la posición de la primera letra t que encuentra (2). Tened en cuenta que el primer caracter ocupa la posición 0.


1.8 Extraer caracteres de una cadena


Podemos recortar partes de una cadena usando [posicion_inicial:posicion_final], se trata de un código muy sencillo pero muy potente, lo mejor es ver unos ejemplos

# Definimos una variable con una cadena
var_Cadena="zyxwvutsrqpo"
# Guardamos en una segunda variable los caracteres de la posición 1 a la 5
var_CadenaExtraida=var_Cadena[1:5]
# Mostramos por pantalla la cadena extraida
print(var_CadenaExtraida)

hay que tener en cuenta que el primer caracter ocupa la posición 0 de manera que el texto que se muestra por patalla es yxwvu.
Podemos omitir los argumentos (posición inicio y posición final), en este caso se toman por defecto los valores de inicio y final de la cadena respectivamente de forma automática. Como se muestra en estos ejemplos

# Definimos una variable con una cadena
var_Cadena="zyxwvutsrqpo"
# Guardamos en una segunda variable la extracción omitiendo la primera variable
var_CadenaExtraida1=var_Cadena[:5]
# Mostramos por pantalla la cadena extraída
print(var_CadenaExtraida1)
# Guardamos en una tercera variable la extracción omitiendo la segunda variable
var_CadenaExtraida2=var_Cadena[1:]
# Mostramos por pantalla la cadena extraída
print(var_CadenaExtraida2)
# Guardamos en una cuarta variable la extracción omitiendo las dos variables
var_CadenaExtraida3=var_Cadena[:]
# Mostramos por pantalla la cadena extraída
print(var_CadenaExtraida3)

para acabar también podemos usar valores negativos para recortar una cadena por la parte posterior (muy útil para extraer la extensión de un archivo), como muestro a continuación

# Definimos una variable con una cadena
var_Cadena="zyxwvutsrqpo"
# Guardamos en una segunda variable la extracción de los tres últimos caracteres
var_CadenaExtraida=var_Cadena[-3:]
# Mostramos por pantalla la cadena extraída
print(var_CadenaExtraida)


1.9 Reemplazar caracteres de una cadena


En Python disponemos de la función replace(cadena a reemplazar,cadena de reemplazo), y sirve para sustituir uno o más carácteres por otros, veamos un ejemplo

# Definimos una variable con una cadena
var_Cadena="Mañana no tenemos que decir no"
# Guardamos en una segunda variable la cadena sustituyendo la palabra no por si
var_CadenaModificada=var_Cadena.replace("no","si")
# Mostramos por pantalla la cadena modificada
print(var_CadenaModificada)


1.10 Convertir una cadena a mayúsculas / minúsculas


Disponemos de dos funciones para esta tarea, upper (para transformar a mayúsculas una cadena) y low (para transformar a minúsculas una cadena)

# Definimos una variable con una cadena
var_Cadena="EsTa Es UnA cAdEnA"
# Guardamos en una segunda variable la cadena en mayúsculas
var_CadenaMayusculas=var_Cadena.upper()
# Mostramos por pantalla la cadena modificada
print(var_CadenaMayusculas)
# Guardamos en una segunda variable la cadena en minúsculas
var_CadenaMinusculas=var_Cadena.lower()
# Mostramos por pantalla la cadena modificada
print(var_CadenaMinusculas)

tened en cuenta que las funciones que modifican cadenas como las que acabamos de ver no modifican la cadena o variable original (var_Cadena), sino que devuelve una "copia" de la cadena modificada. Para modificar la propia cadena original tendríamos que hacer lo siguiente

# Definimos una variable con una cadena
var_Cadena="EsTa Es UnA cAdEnA"
# Modificamos la variable y la pasamos a mayúsculas
var_Cadena=var_Cadena.upper()