Saltar a contenido

Parcial 1 - 2024a - Tema 1#

Ejercicio 1#

La encuesta para la Kermesse IA. En vistas a organizar la Kermesse IA, la universidad quiere estudiar cuáles son las preferencias de gustos de helado de los profesores y estudiantes de la carrera, y para ello se realizará una encuesta a cada uno pidiendo que indique sus tres gustos preferidos de helado. Los resultados de la encuesta se cargarán en un diccionario en donde la clave es el nombre y apellido de la persona, y el valor asignado a dicha clave será una lista con los 3 gustos de helado preferidos, como ilustra el siguiente ejemplo:

dic_encuestas = {
    "DEBORA COPA": ["DULCE DE LECHE", "pistacho", "CHOCOLATE OREO"],
    "GASTON CASTRO": ["CHOCOLATE AMARGO", "LIMON", "SAMBAYÓN"],
    "MARIANO BEIRO": ["PISTACHO", "FRAMBUESA", " CHOCOLATE AMARGO"],
    "IGNACIO MAS": ["DULCE DE LECHE", "KINOTOS AL WHISKY", "Samabayón"],
    ...
}
  1. Comenzaremos por escribir una función que procesará los resultados de la encuesta una vez que se tengan. Para ello, necesitamos escribir una función calcular_frecuencias(dic_encuestas), que reciba un diccionario con el formato anterior y retorne otro diccionario que tenga como clave el nombre del gusto, y como valor la cantidad de personas que eligieron dicho gusto. Si bien los nombres de los gustos a veces quedaron con mayúsculas y a veces no, en el resultado deberán estar siempre en mayúsculas. A continuación un ejemplo de la estructura que deberá tener el resultado de la función:

    {
        "CHOCOLATE OREO": 19,
        "DULCE DE LECHE": 14,
        "PISTACHO": 7,
        ...
        "MENTA GRANIZADA": 1
    }
    
  2. Para cargar en el programa los gustos preferidos de cada persona, escriba una función pedir_gustos() que pida que se ingrese por teclado el nombre y apellido de la persona, y luego pida en forma separada cada uno de sus 3 gustos preferidos. La función no recibirá argumentos, y deberá devolver una tupla con 4 valores: (nombre_y_apellido, gusto1, gusto2, gusto3).

  3. Finalmente, escriba un programa principal main() que utilice la función pedir_gustos() en forma reiterada para obtener los gustos de una persona y cargarlos en el diccionario de la encuesta. Cada vez que se piden los gustos y se cargan en el diccionario, se deberá preguntar si hay más personas que se necesite cargar. Cuando ya no haya más personas a cargar, el programa deberá calcular las frecuencias de cada gusto con la función definida en el ítem (a), e imprimirlas.

Ejercicio 2#

Que nadie se quede sin su helado. La Kermesse IA se acerca y, gracias a la función desarrollada anteriormente para rankear los gustos, nos aprestamos a realizar el encargo de helado. La organización ha seleccionado los 8 gustos de helado que más votos recibieron, y que son los siguientes:

gustos_elejidos = [ "CHOCOLATE OREO", "DULCE DE LECHE", "PISTACHO", "SAMABAYÓN", "FRUTOS DEL BOSQUE",
                    "TORRONCINO", "CHOCOLATE AMARGO", "VAINILLA"]

Quisiéramos estar seguros de que todos los miembros de la institución encuentren al menos uno de sus gustos preferidos entre los gustos disponibles en el evento. Para verificar esto, escriba una función con prototipo verificar_gustos(dic_encuestas, gustos_elegidos) que reciba el diccionario de encuestas (del Ejercicio 1) y el listado de gustos a comprar, y verifique que todos los miembros que completaron la encuesta vayan a encontrar en el stand al menos un gusto de los tres que eligieron. La función deberá devolver un valor booleano que indique True si los gustos que vamos a comprar satisfacen el requerimiento, y False si, por el contrario, existe al menos algún miembro que no encontrará ninguno de sus gustos preferidos.

Ejercicio 3#

Operando vectores en \(\mathbb{R}^n\). Se desea implementar un programa en Python que realice diferentes operaciones entre vectores, entre ellas: suma, resta y producto interno. Por ejemplo:

Suma:

\[ (a_1, a_2, a_3, ...) + (b_1, b_2, b_3, ...) = (a_1 + b_1, a_2 + b_2, a_3 + b_3, ...) \]

Resta:

\[ (a_1, a_2, a_3, ...) - (b_1, b_2, b_3, ...) = (a_1 - b_1, a_2 - b_2, a_3 - b_3, ...) \]

Producto interno:

\[ (a_1, a_2, a_3, ...) \cdot (b_1, b_2, b_3, ...) = a_1 \cdot b_1 + a_2 \cdot b_2 + a_3 \cdot b_3 + ... \]
  1. Implemente una función llamada ingresar_vector() que solicite por la terminal el ingreso de un vector en un solo string, separando cada componente por comas, y retorne una tupla con dicho vector cuyos elementos sean tipo float. Por ejemplo, si el usuario ingresa un vector de 4 elementos como en este ejemplo:

    Ingrese un vector: 2,3,0,1
    

    en ese caso la función deberá retornar la tupla (2.0, 3.0, 0.0, 1.0).

  2. Implemente un programa que solicite al usuario dos vectores, y luego calcule la suma, la resta y el producto interno entre ambos, mostrando los resultados por la terminal. En caso de que ambos vectores no posean el mismo largo, deberá indicarse un mensaje de error y volver a solicitar los datos.