Semana 7: Conjuntos y Diccionarios#

from IPython.display import YouTubeVideo
YouTubeVideo('iMDnVtHTpjM')

7.1. Diccionarios#

Los diccionarios son poderosas estructuras de datos en Python que almacenan datos como pares de claves, siendo esta representada en la siguiente forma: Clave-Valor.

  • Todos los elementos del diccionario se encuentran encerrados en un par de corchetes ({}).

  • Cada elemento en un diccionario contiene una clave y un valor.

  • Cada par de clave-valor es denominado como elemento (item).

  • La ventaja de esto es que puedes acceder a todos los valores almacenados usando simplemente las claves.

#ESTRUCTURA

#mi_diccionario = {"llave1": valor1,"llave2": valor2,"llave3": valor3,"llave4": valor4}
notas = {'Fabio':3, 'Isaac':3.5}
type(notas)
dict
notas['Fabio']
3
Prueba_deportiva = {'Jorge':500,'Diana':600,'Rodrigo':800,'Julia':750,'Liliana':900}
Prueba_deportiva
{'Jorge': 500, 'Diana': 600, 'Rodrigo': 800, 'Julia': 750, 'Liliana': 900}
Prueba_deportiva['Rodrigo']
800

Es posible que las claves sean números también, pero de esta forma se le quita un poco la ventaja a poder organizar una clave y un valor.

Notas = {
    1:4.6,
    2:4,
    3:2.9
}
Notas[1]
4.6

Ejemplo

La tercera ley de Kepler establece la siguiente relación entre el periodo orbital \(T\) de un planeta y la longitud del semieje mayor de su órbita \(a\):

\[T^2 = \frac{4\pi^2 a^3}{MG}\]

donde \(M = 1.989\times10^{30}\) kg es la masa del sol y \(G = 6.674\times 10^{−11}\)m\(^3\)/kg s\(^2\) es la constante de gravitación universal. Escriba un programa donde dado el semieje mayor \(a\) de 5 planetas (dados en forma de diccionario), se calcule y muestre en pantalla el periodo orbital del cuerpo en años.

Nota: Debe indicar de forma precisa las unidades físicas tanto a la hora de pedir los datos de entrada, como al mostrar el resultado final. Adicionalmente, debe mostrar el resultado con tres cifras significativas y en notación científica.

#Asignación de las constantes.
M = 1.989e30
G = 6.674e-11
pi = 3.14159

#Creacion del diccionario que contiene los datos de distancia de los planetas.
#Completar, yo solo puse uno.
planetas = {'Saturno':1.4331e12, 'Jupiter':7.78e11}
a = planetas['Jupiter']  #Define la llave de "Saturno" como la variable a

#Tercera ley de Kepler en unidades del Sistema Internacional
T = ((4*pi**2*a**3)/(M*G))**0.5

#Salida del período en años.
print(f"El período es {T/3.154e7:.3e} años")
El período es 1.187e+01 años

7.2. Conjuntos#

Python también incluye un tipo de dato para conjuntos. Un conjunto es una colección no ordenada y sin elementos repetidos. Los usos básicos de éstos incluyen verificación de pertenencia y eliminación de entradas duplicadas. Los conjuntos también soportan operaciones matemáticas como la unión, intersección, diferencia, y diferencia simétrica.

7.2.1. Declarar conjuntos#

#Definimos el conjunto
frutas = {'manzana', 'naranja', 'manzana', 'pera', 'naranja', 'banano'}
#imprimimos los elementos del conjunto.
#Los elementos repetidos se descartan por defecto.
print(frutas)
{'banano', 'pera', 'naranja', 'manzana'}
#Se puede probar la pertenencia o no de un elemento a un conjunto
'manzana' in frutas
True
#No pertenencia
'piña' in frutas
False
#Definimos el conjunto con set.
a = set('abracadabra')
a
{'a', 'b', 'c', 'd', 'r'}

7.2.2. Operaciones sobre conjuntos#

a = set('abracadabra')
b = set('alacazam')
#Arroja como resultado los elementos de a que NO están en b.
a - b
{'b', 'd', 'r'}
#Arroja como resultado elementos que están en a, o en b, o en ambos conjuntos
a | b
{'a', 'b', 'c', 'd', 'l', 'm', 'r', 'z'}
#Arroja como resultado los elementos que están tanto en a como en b
a & b
{'a', 'c'}
#Arroja como resultado elementos que estan en a o en b, pero no en ambos
a ^ b
{'b', 'd', 'l', 'm', 'r', 'z'}
a = {x for x in 'abracadabra' if x not in 'abc'}

7.3. Ejercicios#

  1. Considere la lista [“sol”, “pedro”, “alejandra”, “roman”]. Escriba un programa que:

  • Muestre en pantalla únicamente aquellos nombres que tengan menos de \(5\) letras.

  • Muestre en pantalla únicamente aquellos nombres que empiecen por la letra \(a\).

  • Muestre en pantalla únicamente aquellos nombres que empiecen y terminen por la letra \(a\).

  1. Dada la siguiente lista: \(numbers\) = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  • Obtenga el tercer elemento de la lista.

  • Obtenga los últimos cinco elementos de la lista.

  • Obtenga los elementos desde el segundo hasta el sexto (incluyendo ambos).

  1. Dada la lista \(fruits\) = [“apple”, “banana”, “cherry”, “date”]:

  • Obtenga el segundo y tercer elemento de la lista.

  • Obtenga los primeros tres elementos de la lista.

  • Obtenga los últimos dos elementos de la lista.

  1. Escriba un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista y la muestre por pantalla el mensaje Yo estudio \(\langle\text{asignatura}\rangle\), donde \(\langle\text{asignatura}\rangle\) es cada una de las asignaturas de la lista.

  2. Escriba un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista, pregunte al usuario la nota (de 0 a 5) que ha sacado en cada asignatura. Al final el programa debe mostrar por pantalla las asignaturas que el usuario tiene que repetir (\(nota < 3\)).

  3. Escriba un programa que lea una frase por parte de un usuario. Las letras de la frase que estén antes de la \(m\) (teniendo como referencia el abcdario) deben ser almacenadas en una lista, mientras que las letras que estén después de la \(m\) (incluyéndola) deben ser almacenadas en otra lista. Asuma que la entrada sólo incluirá letras.

  4. Escriba un programa que lea palabras del usuario hasta que éste introduzca una línea en blanco. Después de que el usuario introduzca una línea en blanco, su programa debe mostrar cada palabra introducida por el usuario exactamente una vez. Las palabras deben aparecer en el mismo orden en que fueron introducidas.

  5. Escriba un programa para comprobar si una lista dada contiene tres números comunes consecutivos. El programa debe mostrar estos números como salida.

  6. Considere la lista [1, 2, 3, 4, 5, 6]. Escriba un programa que para cada valor de la lista imprima en pantalla su cuadrado y raíz cuadrada con un mensaje apropiado.

  7. Escriba un programa que pida al usuario cinco números enteros, los almacene en una lista y los muestre en pantalla ordenados de mayor a menor

  8. Dada una lista de \(n\) enteros positivos, escriba un programa que encuentre el máximo de cada par adyacente en la lista y lo almacene en una nueva lista.

  9. Elabore un programa que reciba como parámetros una matriz cuadrada y la dimensión de ella. Su programa debe retornar verdadero si la matriz es un cuadrado mágico, y falso de lo contrario. Una matriz es un cuadrado mágico si la suma de los datos de cada fila, de cada columna y de cada diagonal es la misma.

  10. Escriba un programa que pida al usuario una palabra y cree un diccionario que contenga el número de veces que contiene cada vocal. El programa no debe diferenciar entre letras minúsculas y mayúsculas.

  11. Escriba un programa que permita gestionar la base de datos de clientes de una empresa. Los clientes se guardarán en un diccionario en el que la clave de cada cliente será un número de identificación, y el valor será otro diccionario con los datos del cliente (nombre, dirección, teléfono, correo, preferente), donde preferente tendrá el valor True si se trata de un cliente preferente. El programa debe preguntar al usuario por una opción del siguiente menú: (1) Añadir cliente, (2) Eliminar cliente, (3) Mostrar cliente, (4) Listar todos los clientes, (5) Listar clientes preferentes, (6) Terminar. En función de la opción elegida el programa tendrá que hacer lo siguiente:

  • Preguntar los datos del cliente, crear un diccionario con los datos y añadirlo a la base de datos.

  • Preguntar por el ID del cliente y eliminar sus datos de la base de datos.

  • Preguntar por el ID del cliente y mostrar sus datos.

  • Mostrar la lista de todos los clientes de la base datos con su ID y nombre.

  • Mostrar la lista de clientes preferentes de la base de datos con su ID y nombre.

  • Terminar el programa.

  1. Escriba un programa que genere un diccionario con la información del directorio, donde cada elemento corresponda a un cliente y tenga por clave su nif y por valor otro diccionario con el resto de la información del cliente. Los diccionarios con la información de cada cliente tendrán como claves los nombres de los campos y como valores la información de cada cliente correspondientes a los campos. Es decir, un diccionario como el siguiente:

{‘01234567L’: {‘nombre’: ‘Luis González’, ‘email’: ‘luisgonzalez@mail.com’, ‘teléfono’: ‘656343576’, ‘descuento’: 12.5}, ‘71476342J’: {‘nombre’: ‘Macarena Ramírez’, ‘email’: ‘macarena@mail.com’, ‘teléfono’: ‘692839321’, ‘descuento’: 8.0}, ‘63823376M’: {‘nombre’: ‘Juan José Martínez’, ‘email’: ‘juanjo@mail.com’, ‘teléfono’: ‘664888233’, ‘descuento’: 5.2}, ‘98376547F’: {‘nombre’: ‘Carmen Sánchez’, ‘email’: ‘carmen@mail.com’, ‘teléfono’: ‘667677855’, ‘descuento’: 15.7}}

  1. Escriba un programa que almacene el diccionario con los créditos de las asignaturas de un semestre {‘Matemáticas’: 6, ‘Física’: 4, ‘Química’: 5} y después muestre por pantalla los créditos de cada asignatura en el formato \(\langle{\text{asignatura}}\rangle\) tiene \(\langle{\text{creditos}}\rangle\) créditos, donde \(\langle{\text{asignatura}}\rangle\) es cada una de las asignaturas del curso, y \(\langle{\text{creditos}}\rangle\) son sus créditos. Al final debe mostrar también el número total de créditos del semestre.

  2. Escriba un programa que recorra una lista y cree un diccionario que contenga el número de veces que aparece cada número en la lista.