<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Introducción a Python
Vamos a hacer una pequeña introducción al lenguaje de programación Python. Para ello, me voy a apoyar principalmente en dos excelentes recursos para aprender Python online que siempre recomiendo
Step1:  Variables y tipos de datos
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
Step2:  En Python podemos utilizar como nombre de variable cualquier secuencia de caracteres alfanuméricos, siempre que comience por una letra del alfabeto y no sea una palabra reservada por el propio lenguaje (típicamente, nombres de funciones y palabras clave).
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 declaradas anteriormente. Para imprimir por pantalla, usamos la función print.
Step3:  En el ejemplo anterior, hemos declarado tres variables diferentes. Sin embargo, el tipo de dato que estábamos almacenando era el mismo
Step4:  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
Step5:  Operaciones aritméticas
Podemos utilizar el intérprete de Python como una calculadora. Basta con introducir operaciones aritméticas como operadores que seguramente ya conoces
Step6:  Si retomamos lo aprendido anteriormente acerca de las variables, veremos que podemos declarar variables a partir de operaciones matemáticas, por ejemplo
Step7:  Gestión de cadenas (strings)
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
Step8:  ¡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
Step9:  Conversión ente cadenas y enteros
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
Step10:  Para hacer el paso contrario, es decir, transformar cadenas en enteros, podemos utilizar la función int().
Step11:  Recuerda, cualquier secuencia alfanumérica encerrada entre comillas será tratada como una cadena de caracteres (string) aunque esté formada únicamente por dígitos.
Métodos sobre cadenas
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.
Step12:  Listas
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
Step13:  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
Step14:  Podemos acceder a porciones de una lista usando una notación especial en los corchetes del índice. nombre_de_lista[n
Step15:  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.
Step16:  Métodos sobre listas
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.
Step17:  Tuplas
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
Step18:  Diccionarios
Los diccionarios de Python son una estructura de datos que almacena una colección de pares clave
Step19:  Podemos acceder a los elementos del diccionaro a través del nombre de la clave
Step20:  Métodos sobre diccionarios
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.
Step21:  Los diccionarios pueden contener otros diccionarios anidados, lo que conlleva que podemos manejar estructuras bastante complejas. A modo de ejemplo
Step22:  Ejercicio final en clase
En clase se nos ocurre cómo podemos crearnos lista de películas y series de televisión que nos gustan. Definimos fichas de películas y series usando diccionarios.
Step23:  Para simular una colección de películas y series vistas en orden cronológico, creo un lista de Pyhton en la que voy incluyendo las fichas de películas a medida que las voy viendo.
<ASSISTANT_TASK:>
Python Code:
print('Esto es un mensaje')
Explanation: Introducción a Python
Vamos a hacer una pequeña introducción al lenguaje de programación Python. Para ello, me voy a apoyar principalmente en dos excelentes recursos para aprender Python online que siempre recomiendo: 
el curso de Python en CodeCademy.
el curso Python for the Humanities de Folgert Karsdorp.
¿Qué es esto?
Esto es un cuaderno de Jupyter compuesto de una serie de celdas de distintos tipos. Esta primera celda contiene texto formateado. Para ver el código (y editarlo, si es necesario), haz doble clic sobre ella y verás el código Markdown.
La siguiente celda, por el contrario, contiene código en Python. Para ejecutarla y ver cómo funciona, selecciónala y pulsa ctrl-ENTER:
End of explanation
# NOTA: en Python, las líneas que comienzan con # son comentarios
# El intérprete no las lee. Los humanos sí deberíamos leerlas :-)
mivariable = 34
edad = 25
year = 1992
Explanation: Variables y tipos de datos
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:
End of explanation
print(mivariable)
print(year)
print('mivariable')
print('year')
print('El niño come manzanas.')
print(255666)
# esta celda dará error, al menos mientras no declaremos la variable llamada otraVariable
print(otraVariable)
Explanation: En Python podemos utilizar como nombre de variable cualquier secuencia de caracteres alfanuméricos, siempre que comience por una letra del alfabeto y no sea una palabra reservada por el propio lenguaje (típicamente, nombres de funciones y palabras clave).
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 declaradas anteriormente. Para imprimir por pantalla, usamos la función print.
End of explanation
# 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("Me llamo", nombre, apellidos) # fíjate cómo puedo imprimir más de una cosa con la función print
print(precio)
print(mineral)
Explanation: En el ejemplo anterior, hemos declarado tres variables diferentes. Sin embargo, el tipo de dato que estábamos almacenando era el mismo: simples números enteros. 
Como hemos mencionado antes, las variables pueden almacenar distintos tipos de datos. Los principales que vamos a utilizar nosotros son: 
números enteros: 1, 4542, -38
números reales: 2.3, -0.00000034123, 10.0
cadenas de texto: hola, La niña come manzanas, to/TO be/VB or/CC not/RB to/TO be/VB
valores booleanos: True, False
Veamos cómo funcionan.
End of explanation
nombre = 'Ana'
apellidos = 'Serrano de la Oca'
print(nombre, apellidos)
Explanation: 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:
End of explanation
#suma 
print(5+6)
# resta
print(10-3)
# multiplicación
print(25*6)
# división
print(2558/800000)
# potencias
print(2**3)
# módulo hace referencia al resto de la división 10/2.
print(10%2)
print(6+5+12*2)
print((6+5+12)*2)
print(6+5+(12*2))
Explanation: Operaciones aritméticas
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.
End of explanation
# una suma sencilla
suma = 9+5
print(suma)
# calculamos el área de un cuadrado
lado = 1.5
area = lado**2 # es equivalente a lado*lado
print(area)
# 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)
# calculamos la edad actual de una persona
ahora = 2016
fechaNacimiento = 1985
edad = ahora - fechaNacimiento
print(edad)
Explanation: Si retomamos lo aprendido anteriormente acerca de las variables, veremos que podemos declarar variables a partir de operaciones matemáticas, por ejemplo:
End of explanation
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.'''
Explanation: Gestión de cadenas (strings)
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:
End of explanation
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)
# sin embargo, sí puedo utilizar el operador '+' para concatenar varias cadenas
print(numero2 + '1')
print('¡Hola' + ' ' + 'amigo!')
print("otra", "vez " * 3)
print("otra" + "vez" * 3)
Explanation: ¡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:
End of explanation
# 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
print("\nOtros tipos de datos son:")
print(type(2.3))
print(type(True))
print(type(""))
Explanation: Conversión ente cadenas y enteros
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:
End of explanation
# 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
# esto no va a funcionar :-/ no podemos convertir cadenas a enteros
otracosa = "hola amigo"
print(int(otracosa))
Explanation: Para hacer el paso contrario, es decir, transformar cadenas en enteros, podemos utilizar la función int().
End of explanation
print(len(nombre))
print(len(oracion))
print(len(parrafo))
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(oracion)
print(parrafo.upper()) # transforma una cadena a mayúsculas (uppercas)
print(parrafo) #
print('AbCdEfGhIjKlMnÑoPqRsTuVwXyZ'.swapcase()) # transforma mayúsculas a minúsculas y viceversa
# incluso funciona con las letras con diacríticos
print("áéíóúüûÁÉÍÓÚÛÜ".swapcase())
Explanation: Recuerda, cualquier secuencia alfanumérica encerrada entre comillas será tratada como una cadena de caracteres (string) aunque esté formada únicamente por dígitos.
Métodos sobre cadenas
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.: 
contar el número de caracteres de una cadena (len()) 
transformar la cadena a mayúsculas (.upper()) o minúsculas (.lower())
Para más info, consulta los métodos que podemos aplicar a las cadenas.
End of explanation
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(), len(nombre)]
listaVacia = []
# los imprimimos por pantalla
print(numeros)
print(dias)
print(misCosas)
print(listaVacia)
print(type(numeros))
print(len(numeros))
print(len(misCosas))
Explanation: Listas
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:
End of explanation
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])
print('el tercer día de la semana es ' + dias[2] + ' y el sexto día es ' + dias[-2])
print('el tercer día de la semana es', dias[2], 'y el sexto día es', dias[-2])
# 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])
Explanation: 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].
End of explanation
# 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:-1])
print(dias[3:5])
Explanation: 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.
End of explanation
cadena = 'perrogatorana'
print(cadena[:5])
print(cadena[5:9])
print(cadena[-4:])
# practica los índices en listas y en cadenas, es muy importante tener solutura
pal1 = 'perro'
pal2 = 'soles'
pal3 = 'azul'
pal4 = 'amigos'
pal5 = 'cafés'
pal6 = 'hola'
print(pal1[-1] == 's')
print(pal2[-1] == 's')
print(pal3[-1] == 's')
print(pal4[-1] == 's')
print(pal5[-1] == 's')
print(pal6[-1] == 's')
print("---------------------")
print(pal1.endswith('s'))
print(pal2.endswith('s'))
print(pal3.endswith('s'))
print(pal4.endswith('s'))
print(pal5.endswith('s'))
print(pal6.endswith('s'))
Explanation: 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.
End of explanation
# creamos una lista vacía
miLista = []
# ¿está realmente vacía?
print(len(miLista))
# ¿qué posición ocupa "jueves" o "domingo" en la lista días
print(dias.index('jueves'))
print(dias.index('domingo'))
# esto, sin embargo, dará error
print(dias.index('DOMINGO'))
miLista = []
# 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)
# añadimos como cuarto elemento otra lista de elementos: fíjate en la estructura del resultado
miLista.append(numeros)
print(miLista)
print(len(miLista))
# ¿cuántos elementos tiene miLista?
# estas dos líneas son equivalentes, pero tienen sutiles diferencias.
# aquí, concatenamos con el símbolo + tres cadenas dentro de una misma intrucción print
# uno de los elementos es originariamente un número entero, por eso hay que transformarlo antes con str
print('la lista miLista tiene ' + str(len(miLista)) + ' elementos')
# aquí, imprimimos tres elementos diferentes en una misma instrucción print
print('la lista miLista tiene', len(miLista), 'elementos')
print(miLista)
# insertamos como segundo elemento otro nuevo valor
miLista.insert(1, 'segundo elemento')
print(miLista)
miLista[1] = "second element"
print(miLista)
# más ejemplos con los métodos insert y append
l = []
print(l)
l.append('hola')
print(l)
l.append('adiós')
print(l)
l.insert(1, 'segundo elemento')
print(l)
l.insert(2, 'otra cosa')
print(l)
dias = ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(dias)
# eliminarmos el elemento 2 y el elemento "palabra" de miLista
dias.pop(2)
print(dias)
dias.remove('sábado')
print(dias)
letras = ['a', 'b', 'c', 'a']
print(letras.count('aaaaa'))
letras.remove('a')
print(letras)
print(letras.count('a'))
# también puedo eliminar el último elemento de la lista
miLista.pop(-1)
print(miLista)
# más pruebas concatenando listas
dias = ["lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"]
dias.extend(numeros)
print(dias)
# fíjate en que la lista numeros crece de manera indefinida
numeros.extend(dias)
print(numeros)
Explanation: Métodos sobre listas
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.:
podemos contar el número de elementos de una lista con la función len().
podemos buscar elementos en una lista sin saber la posición concreta que ocupan con el método .index().  
podemos añadir nuevos elementos al final de una lista con el método .append().
podemos añadir nuevos elementos en una posición concreta de una lista con el método .insert().
podemos eliminar elementos de una lista con los métodos .remove() y  .pop().
podemos concatenar una lista con otra con el método .extend().
Para más info, consulta los métodos que podemos aplicar a las listas.
End of explanation
# 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])
Explanation: Tuplas
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.
End of explanation
# entre llaves, separando claves y valores con dos puntos, y separando pares con comas
victor = {"nombre": "Victor", "apellido": "Peinado", "sexo": "H", "edad": 38}
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)
print(type(personas))
print(type(personas[-1]))
print(type(personas[-1]["edad"]))
Explanation: Diccionarios
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:
End of explanation
print(victor['nombre'])
print(antonio['apellido'])
print(personas[1]['nombre'])
Explanation: Podemos acceder a los elementos del diccionaro a través del nombre de la clave:
End of explanation
# ¿cuántos pares clave:valor tiene el diccionario antonio?
print(len(antonio))
# dame las claves
print(antonio.keys())
# dame los valores
print(antonio.values())
# 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('email' in antonio)
print('altura' in antonio)
print(antonio)
# eliminamos la clave altura de antonio
antonio.pop('altura') 
print('altura' in antonio) # y esto ahora devuelve False
print(antonio)
Explanation: Métodos sobre diccionarios
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.:
podemos contar el número de elementos de una diccionario la función len().
podemos recuperar una lista conteniendo las claves de un diccionario con el método .keys().
podemos recuperar una lista conteniendo los valores de un diccionario con el método .values().
podemos eliminar un elemento de un diccionario con el método .pop().
Para más info, consulta los métodos que podemos aplicar a los diccionarios.
End of explanation
# creo un diccionario de la familia Pig, en principio vacío
familiaPig = {}
# creo varios diccionarios por cada miembro de la familia
peppa = {"nombre": "Peppa", "apellido": "Pig", "email": "peppa@pig.com",}
george = {"nombre": "George", "apellido": "Pig", "email": "george@pig.com",}
daddy = {"nombre": "Daddy", "apellido": "Pig", "email": "daddy@pig.com",}
mommy = {"nombre": "Mommy", "apellido": "Pig", "email": "mommy@pig.com",}
familiaPig['hija'] = peppa
familiaPig['hijo'] = george
familiaPig['padre'] = daddy
familiaPig['madre'] = mommy
print(familiaPig)
# ¿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 = [daddy, mommy, peppa, george]
# 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"])
# esta celda no hace nada, salvo insertar una imagen externa
from IPython.core.display import Image
Image('http://peppapigjuegos.com/img/wallpapers/2pag/peppa_pig_family.jpg')
Explanation: Los diccionarios pueden contener otros diccionarios anidados, lo que conlleva que podemos manejar estructuras bastante complejas. A modo de ejemplo:
End of explanation
pelicula = {}
pelicula['titulo'] = "The Arrival"
pelicula['ano'] = 2016
pelicula['reparto'] = ["Amy Adams", "Jeremy Renner", "Forest Whitaker",]
pelicula['esBuena'] = True
print(pelicula)
print("----------------------------")
# imprime el título
print("La película se titula", pelicula['titulo'], ".")
# y más datos asociados a la peli
print("La película tiene" + str(len(pelicula["reparto"])) + "actores" + ".")
# normalmente no necesitaremos esto, pero aquí hay un ejemplo de cómo formatear 
# cadenas complejas con print
print("La película se titula {} y tiene {} actores.".format(pelicula["titulo"], len(pelicula["reparto"])))
# creamos una ficha para una serie
serie = {"titulo": "Narcos", "ano":2015, "reparto":["Uno", "Otro"]}
print(serie)
print(serie["titulo"])
# añadimos más datos
serie["esBuena"] = True
print(serie)
Explanation: Ejercicio final en clase
En clase se nos ocurre cómo podemos crearnos lista de películas y series de televisión que nos gustan. Definimos fichas de películas y series usando diccionarios.
End of explanation
coleccion = []
coleccion.append(serie)
print(coleccion)
coleccion.append(pelicula)
print(coleccion)
# añado una tercera serie, y la meto en la colección
serie = {"titulo": "The Expanse", "ano":2015, "reparto":["Fulano", "Mengano"]}
coleccion.append(serie)
print(coleccion)
Explanation: Para simular una colección de películas y series vistas en orden cronológico, creo un lista de Pyhton en la que voy incluyendo las fichas de películas a medida que las voy viendo.
End of explanation
<END_TASK>