Vamos a hacer una pequeña introducción al lenguaje de programación Python. Para ello, me voy a apoyar principalmente en el curso online de Python en CodeCademy. Para profundizar y afianzar conceptos generales de Python es muy recomendable que hagáis por vuestra cuenta al menos los nueve primeros temas este curso.
En los lenguajes de programación, una variable es un tipo de identificador que almacena o al que se le asigna un determinado valor. Este valor puede ser de distinto tipo, como veremos más adelante. Para asignar valores a variables, utilizamos el signo =
con la siguiente sintaxis:
nombre_de_variable = valor
Veamos un ejemplo: vamos a declarar distintas variables, asignándoles valores:
# NOTA: en Python, las líneas que comienzan con # son comentarios
# El intérprete no las lee. Los humanos sí deberíamos leerlas :-)
mivariable = 25
edad = 25
year = 2013
Una vez que hemos asignado valores a nombres de variables, podemos utilizar o recuperar esos valores siempre que lo necesitemos.
Para hacer una pequeña prueba, vamos a imprimir por pantalla el valor de las variables anteriores. Para imprimir por pantalla, usamos la instrucción print
.
print mivariable
print year
print "El niño come manzanas."
print 255666
25 2013 El niño come manzanas. 255666
En el ejemplo anterior, hemos declarado tres variables diferentes. Sin embargo, el tipo de dato que estábamos almacenando eras el mismo: números enteros. Como hemos mencionado antes, las variables pueden almacenar distintos tipos de datos. Los principales son: números enteros, números reales, cadenas de texto y valores booleanos (que nos permiten almacenar valores como verdadero o falso).
# números enteros (integer)
hijos = 3
# números reales (float), siempre indicando los decimales con punto
precio = 350.25
longitud = 1.5
# cadenas de texto (string), siempre entre comillas simples o dobles
nombre = "Pedro"
apellidos = 'Sanz Hernández'
# valores booleanos (bool): solo pueden ser True o False, escritos tal cual sin comillas
animal = True
mineral = False
# imprimimos algunos de ellos por pantalla
print hijos
print nombre, apellidos
print precio
print mineral
3 Pedro Sanz Hernández 350.25 False
Los valores que contienen las variabes pueden ser reasignados en cualquier momento. Eso sí, solo almacenan el último valor que hayamos asignado.
Si reasignamos algunas de las variables declaradas anteriormente e imprimimos sus valores por pantalla, comprobamos que éstos han cambiado:
nombre = "Ana"
apellidos = 'Serrano de la Oca'
print nombre, apellidos
Ana Serrano de la Oca
Podemos utilizar el intérprete de Python como una calculadora. Basta con introducir operaciones aritméticas como operadores que seguramente ya conoces: suma (+
), resta (-
), multiplicación (*
), división (/
), potencias (**
) y módulo (%
). Vamos a imprimir por pantalla el resultado de algunas operaciones.
# en versiones anteriores a Python3, con esta línea nos aseguramos que la división funciona como esperamos
from __future__ import division
#suma
print 5+6
# resta
print 10-3
# multiplicación
print 25*6
# división
print 2558/8
# potencias
print 2**3
# módulo hace referencia al resto de la división 10/2.
print 10%2
11 7 150 319.75 8 0
Si retomamos lo aprendido anteriormente acerca de las variables, veremos que podemos declarar variables a partir de operaciones matemáticas, por ejemplo:
# una suma sencilla
suma = 9+5
print suma
14
# calculamos el área de un cuadrado cuyo lado
lado = 1.5
area = lado**2 # es equivalente a lado*lado
print area
2.25
# vamos a calcular el precio final de un producto cuyo valor es 19,95€
iva = 21
precio = 19.95
precio_final = precio + (precio * iva)/100
print precio_final
24.1395
# calculamos la edad actual de una persona
ahora = 2014
fechaNacimiento = 1985
edad = ahora - fechaNacimiento
print edad
29
Si nuestro objetivo es aprende a programar en Python para procesar texto, las cadenas de caracteres van a ser el principal tipo de dato que vamos a manejar. Como hemos visto antes, las cadenas se identifican en Python porque se declaran entre comillas dobles ("cadena"
) o simples ('cadena'
) o, si las cadenas son muy largas y ocupan más de una línea, entre triples pares de comillas.
Algunos ejemplos de cadenas:
nombre = "Godofredo de Orléans"
oracion = 'GREEN COLORLESS IDEAS SLEEP FURIOUSLY'
parrafo = """En un lugar de la Mancha, de cuyo nombre no quiero acordarme,
no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero,
adarga antigua, rocín flaco y galgo corredor. Una olla de algo más vaca
que carnero, salpicón las más noches, duelos y quebrantos los sábados,
lentejas los viernes, algún palomino de añadidura los domingos, consumían
las tres partes de su hacienda."""
¡OJO! Podemos definir como valores de variables cadenas formadas por secuencias de números, siempre que se declaren entre comillas. Es muy importante entender la diferencia entre:
numero1 = 45852236
numero2 = "45852236"
# podemos realizar operaciones aritméticas entre números
print numero1 + 1
# pero no entre cadenas y números: esto da un error
print numero2 + 1
45852237
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-12-285435eeee1a> in <module>() 6 7 # pero no entre cadenas y números: esto da un error ----> 8 print numero2 + 1 TypeError: cannot concatenate 'str' and 'int' objects
# sin embargo, sí puedo utilizar el operador '+' para concatenar varias cadenas
print numero2 + "1"
print "¡Hola" + " " + "amigo!"
458522361 ¡Hola amigo!
Otra manera de generar cadenas de texto es utilizando la función str()
con un argumento que no sea una cadena. Fíjate en los ejemplos:
# guardamos en numero1 un entero
numero1 = 45852236
# en numero2, guardamos el valor de numero1 convertido a cadena de texto con la función str()
numero2 = str(numero1)
# con la función type() imprimimos por pantalla el tipo de dato que guarda una variable
print type(numero1) # es un entero: int
print type(numero2) # es una cadena: str
<type 'int'> <type 'str'>
Para hacer el paso contrario, es decir, transformar cadenas en enteros, podemos utilizar la función int()
.
# guardamos en numero1 una cadena
numero1 = "45852236"
# en numero2, guardamos el valor de numero1 convertido a entero con la función int()
numero2 = int(numero1)
# con la función type() imprimimos por pantalla el tipo de dato que guarda una variable
print type(numero1) # es una cadena: str
print type(numero2) # es un entero: int
<type 'str'> <type 'int'>
Recuerda, cualquier secuencia alfanumérica encerrada entre comillas será tratada como una cadena de caracteres (string) aunque esté formada únicamente por dígitos.
Existe una serie de funciones y metodos que podemos ejecutar sobre cadenas de texto y que nos van a permitir realizar operaciones y transformar dichas cadenas de distintas maneras, p. ej.:
len()
).upper()
) o minúsculas (.lower()
)Para más info, consulta los métodos que podemos aplicar a las cadenas.
print len(nombre) # devuelve la longitud (en número de caracteres) de una cadena
print oracion.lower() # transforma una cadena a minúsculas (lowercas)
print parrafo.upper() # transforma una cadena a mayúsculas (uppercas)
print "AbCdEfGhIjKlMnÑoPqRsTuVwXyZ".swapcase() # transforma mayúsculas a minúsculas y viceversa
21 green colorless ideas sleep furiously EN UN LUGAR DE LA MANCHA, DE CUYO NOMBRE NO QUIERO ACORDARME, NO HA MUCHO TIEMPO QUE VIVíA UN HIDALGO DE LOS DE LANZA EN ASTILLERO, ADARGA ANTIGUA, ROCíN FLACO Y GALGO CORREDOR. UNA OLLA DE ALGO MáS VACA QUE CARNERO, SALPICóN LAS MáS NOCHES, DUELOS Y QUEBRANTOS LOS SáBADOS, LENTEJAS LOS VIERNES, ALGúN PALOMINO DE AñADIDURA LOS DOMINGOS, CONSUMíAN LAS TRES PARTES DE SU HACIENDA. aBcDeFgHiJkLmNÑOpQrStUvWxYz
Las listas de Python son una estructura de datos que almacenan una colección de diferentes tipos de información en forma de secuencia ordenada, bajo un solo nombre de variable. Las listas pueden guardar valores de cualquiera de los tipos que hemos visto anteriormente (cadenas, números y booleanos) e incluso las listas pueden incluir otras listas de manera anidada.
Las listas se declaran especificando la colección de elementos entre corchetes y separando los elementos con comas:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
dias = ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]
misCosas = [23.4, True, oracion.lower()]
listaVacia = []
# los imprimimos por pantalla
print numeros
print dias
print misCosas
print listaVacia
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ['lunes', 'martes', 'mi\xc3\xa9rcoles', 'jueves', 'viernes', 's\xc3\xa1bado', 'domingo'] [23.4, True, 'green colorless ideas sleep furiously'] []
Las listas son estructuras de datos ordenadas, lo que implica que podemos acceder a los elementos individuales a través de un índice (la posición que ocupa en la secuencia). El índice se especifica indicando el nombre de la lista y un entero entre corchetes: nombre_de_lista[índice]
.
¡OJO! Los índices de las listas comienzan con 0, no con 1: el primer elemento es nombre_de_lista[0]
.
print "el primer día de la semana es " + dias[0]
print "el tercer día de la semana es " + dias[2]
print "y el último es " + dias[-1]
# podemos utilizar los índices también para reasignar valores a los elementos de una lista
# p. ej., cambiamos el primer valor de la lista misCosas
misCosas[0] = 44
print misCosas
# ¡OJO! si intentamos acceder a un índice que no existe, el intérprete nos dará error
print misCosas[8]
el primer día de la semana es lunes el tercer día de la semana es miércoles y el último es domingo [44, True, 'green colorless ideas sleep furiously']
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-18-a069ad1a71ce> in <module>() 9 10 # ¡OJO! si intentamos acceder a un índice que no existe, el intérprete nos dará error ---> 11 print misCosas[8] IndexError: list index out of range
Podemos acceder a porciones de una lista usando una notación especial en los corchetes del índice. nombre_de_lista[n:m]
devuelve la secuencia de elementos de la lista que va desde el índice n hasta el m.
# imprime los tres primeros elementos de la variable dias
print dias[:3]
# imprime elementos del 3º al 6ª de la variable números
print numeros[2:6]
# imprime los tres últimos números de la variable números
print numeros[-3:]
['lunes', 'martes', 'mi\xc3\xa9rcoles'] [3, 4, 5, 6] [8, 9, 10]
Las cadenas, al igual que las listas, son estructuras ordenadas. No lo hemos mencionado antes, pero podemos utilizar esta misma notación de índices para acceder a elementos y a porciones de una cadena.
cadena = "perrogatorana"
print cadena[:5]
print cadena[5:9]
print cadena[-4:]
perro gato rana
Como con las cadenas, en las listas existen una serie de funciones y métodos que podemos ejecutar y que nos van a permitir realizar operaciones y transformar dichas listas de distintas maneras, p. ej.:
len()
..index()
..append()
..insert()
..remove()
y .pop()
..extend()
.Para más info, consulta los métodos que podemos aplicar a las listas.
# creamos una lista vacía
miLista = []
# ¿está realmente vacía?
print len(miLista)
0
# ¿qué posición ocupa "jueves" en la lista dias
print dias.index("jueves")
3
# añadimos varios elementos nuevos y vemos cómo va aumentando la lista
miLista.append(2)
print miLista
miLista.append("palabra")
print miLista
miLista.append(25**3)
print miLista
[2] [2, 'palabra'] [2, 'palabra', 15625]
# añadimos como cuarto elemento otra lista de elementos: fíjate en la estructura del resultado
miLista.append(numeros)
print miLista
[2, 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
# ¿cuántos elementos tiene miLista?
print "la lista miLista tiene " + str(len(miLista)) + " elementos"
la lista miLista tiene 4 elementos
# añadimos como segundo elemento otro nuevo valor
miLista.insert(1, "segundo elemento")
print miLista
[2, 'segundo elemento', 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
print miLista
# eliminarmos el elemento 2 y el elemento "palabra" de miLista
miLista.remove(2)
print miLista
[2, 'segundo elemento', 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]] ['segundo elemento', 'palabra', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
miLista.remove("palabra")
print miLista
['segundo elemento', 15625, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
# también puedo eliminar el último elemento de la lista
miLista.pop(-1)
print miLista
['segundo elemento', 15625]
# concateno dos listas
dias.extend(numeros)
print dias
['lunes', 'martes', 'mi\xc3\xa9rcoles', 'jueves', 'viernes', 's\xc3\xa1bado', 'domingo', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Las tuplas de Python son una estructura de datos que almacenan una colección de diferentes tipos de información en forma de secuencia ordenada. Estas tuplas pueden guardar valores de cualquiera de los tipos que hemos visto anteriormente (cadenas, números y booleanos) e incluso otras listas o tuplas de manera anidada. La principal diferencia con las listas es que las tuplas son inmutables: no podemos modificarlas, ni añadiendo o eliminando elementos, ni reordenado, etc.
Las tuplas se declaran especificando la colección de elementos entre paréntesis y separando los elementos con comas.
# creo tres tripletas, cada una almacenando el nombre, apellido y sexo de unas personas ficticias
tripleta1 = ("Carlos", "Pujol", "H")
tripleta2 = ("Montse", "Santos", "M")
tripleta3 = ("Ana", "Ruiz", "M")
# creo una lista de personas y añado las tripletas por orden
personas = []
personas.append(tripleta1)
personas.append(tripleta2)
personas.append(tripleta3)
print personas
# las tuplas son secuencias ordenadas, y como tales podemos acceder a sus elementos
# a través de índices numéricos
print len(personas[0])
print personas[1][1]
[('Carlos', 'Pujol', 'H'), ('Montse', 'Santos', 'M'), ('Ana', 'Ruiz', 'M')] 3 Santos
Los diccionarios de Python son una estructura de datos que almacena una colección de pares clave:valor. La clave es siempre una cadena, y el valor puede contener cualquiera de los tipos que hemos visto anteriormente (cadenas, números y booleanos) e incluso otras listas, tuplas o diccionarios de manera anidada. Al contrario que las listas y las tuplas, los diccionarios no son estructuras ordenadas. Por lo tanto, nos interesará utilizar diccionarios cuando necesitamos almacenar y acceder directamente a información cuyo nombre conozcamos.
Podemos definir diccionarios de varias maneras:
# entre llaves, separando claves y valores con dos puntos, y separando pares con comas
victor = {"nombre": "Victor", "apellido": "Peinado", "sexo": "H", "edad": 36}
print victor
# declarando el diccionario como una estructura vacía y añadiendo los pares clave:valor después
antonio = {}
antonio["nombre"] = "Antonio"
antonio["apellido"] = "Santos"
antonio["sexo"] = "H"
antonio["edad"] = 26
print antonio
# creo una lista de diccionarios: OJO, la lista sí está ordenada
personas = [victor, antonio]
print personas
{'edad': 36, 'nombre': 'Victor', 'apellido': 'Peinado', 'sexo': 'H'} {'edad': 26, 'nombre': 'Antonio', 'apellido': 'Santos', 'sexo': 'H'} [{'edad': 36, 'nombre': 'Victor', 'apellido': 'Peinado', 'sexo': 'H'}, {'edad': 26, 'nombre': 'Antonio', 'apellido': 'Santos', 'sexo': 'H'}]
Podemos acceder a los elementos del diccionaro a través del nombre de la clave:
print victor["nombre"]
print antonio["apellido"]
print personas[1]["nombre"]
Victor Santos Antonio
Como con otras estructuras de datos, los diccionarios proporcionan una serie de funciones y métodos que podemos ejecutar y que nos van a permitir manipular y acceder a dichos diccionarios de distintas maneras, p. ej.:
len()
..keys()
..values()
..has_key()
..pop()
.Para más info, consulta los métodos que podemos aplicar a los diccionarios.
# ¿cuántos pares clave:valor tiene el diccionario antonio?
print len(antonio)
# dame las claves
print antonio.keys()
# dame los valores
print antonio.values()
4 ['edad', 'nombre', 'apellido', 'sexo'] [26, 'Antonio', 'Santos', 'H']
# recuerda que para crear nuevos pares clave:valor, basta con asignarles un valor
antonio["altura"] = 1.79
# podemos comprobar si el diccionario tiene determinadas claves
print antonio.has_key("email")
print antonio.has_key("altura")
print antonio
False True {'edad': 26, 'nombre': 'Antonio', 'altura': 1.79, 'apellido': 'Santos', 'sexo': 'H'}
# eliminamos la clave altura de antonio
antonio.pop("altura")
print antonio
{'edad': 26, 'nombre': 'Antonio', 'apellido': 'Santos', 'sexo': 'H'}
Los diccionarios pueden contener otros diccionarios anidados, lo que conlleva que podemos manejar estructuras bastante complejas. A modo de ejemplo:
# creo un diccionario de la familia Pig, en principio vacío
familiaPig = {}
# creo varios diccionarios por cada miembro de la familia
hija = {"nombre": "Peppa", "apellido": "Pig", "email": "peppa@pig.com",}
hijo = {"nombre": "George", "apellido": "Pig", "email": "george@pig.com",}
padre = {"nombre": "Daddy", "apellido": "Pig", "email": "daddy@pig.com",}
madre = {"nombre": "Mommy", "apellido": "Pig", "email": "mommy@pig.com",}
familiaPig["hija"] = hija
familiaPig["hijo"] = hijo
familiaPig["padre"] = padre
familiaPig["madre"] = madre
print familiaPig
{'hijo': {'nombre': 'George', 'email': 'george@pig.com', 'apellido': 'Pig'}, 'madre': {'nombre': 'Mommy', 'email': 'mommy@pig.com', 'apellido': 'Pig'}, 'padre': {'nombre': 'Daddy', 'email': 'daddy@pig.com', 'apellido': 'Pig'}, 'hija': {'nombre': 'Peppa', 'email': 'peppa@pig.com', 'apellido': 'Pig'}}
# ¿Cuál es el email de la madre?
print familiaPig["madre"]["email"]
# ¿Y el nombre de la hija?
print familiaPig["hija"]["nombre"]
# en lugar de un diccionario, puedo crear también una lista con los miembros de la familia ordenados por edad
familia = [padre, madre, hija, hijo]
# ahora solo puedo acceder por índices, así que ¿cuál es el email del primer miembro de la familia?
print familia[0]["email"]
# ¿Y el nombre del miembro más joven?
print familia[-1]["nombre"]
mommy@pig.com Peppa daddy@pig.com George
from IPython.core.display import Image
Image("http://peppapigjuegos.com/img/wallpapers/2pag/peppa_pig_family.jpg")