carmi1909@ciencias.unam.mx
ejercicio_resueltos_6Carmi
plain_text
3 years ago
6.1 kB
3
Indexable
Never
# -*- coding: utf-8 -*- """ Created on Sat Nov 20 21:08:30 2021 @author: carmi """ #%% Ejercicio 128: Búsqueda inversa """ Descripción: Escribe una función llamada busquedaInversa que encuentre todas las llaves en un diccionario que se asignan un valor específico. La función va a tomar el diccionario y el valor a buscar como sus parámetros. Va a regresar una lista (posiblemente vacía) de llaves del diccionario que se asignan con el valor proporcionado. Agrega un programa principal (main) que demuestre la función busquedaInversa como parte de tu solución a este ejercicio. Tu programa debe crear un diccionario y luego mostrar que la función busquedaInversa funcione correctamente cuando regrese multiples llaves, una sola llave o ninguna llave. Asegurate que tu programa principal solo corra cuando el archivo que contiene tu solución a este ejercicio no esté importado a otro programa Solución: Definir función busqueda inversa(diccionario, valor): definir lista vacía LLAVES Por llave en diccionario: Si el valor de la llave es igual al valor: agregar a LLAVES el valor regresar LLAVES Definir una función principal (main) y probarla con la traducción de palabras en inglés a francés Correr la función main únicamente si el archivo no ha sido importado """ def busquedaInversa(datos,valor): """ Busqueda la llave de un diccionario dado un valor específico Parameters ---------- datos : Diccionario. valor : Valor a buscar en el diccionario. Returns ------- llaves : Llaves correspondientes al valor dado. """ llaves = [] for llave in datos: if datos[llave] == valor: llaves.append(llave) return llaves def main(): """ Función principal que manda a llamar busquedaInversa Returns ------- None. """ frEn = {"le" : "the", "la" : "the", "livre" : "book", "pomme" : "apple"} print("Las palabras francesas para 'the' son: ", busquedaInversa(frEn, "the")) print("Esperado: ['le', 'la']") print() print("La palabra 'apple' en frances es: ", busquedaInversa(frEn, "apple")) print("Esperado: ['pomme']") print() print("La palabra 'asdf' en francés es: ", busquedaInversa(frEn, "asdf")) print("Esperado: []") if __name__ == "__main__": main() """ La parte que se me dificultó fue saber cómo referirse al valor de una correspondiente llave de un diccionaro, para solucionar esto consulté la siguiente página: https://devcode.la/tutoriales/diccionarios-en-python/ Y lo que aprendí fue que nos ponemos treferir "the" como frEn[le] (usando el diccionario frEn) """ #%% Ejercicio 129: Simulación de dos dados """ Descripción: En este ejercicio simularas 100 lanzadas de dados. Empieza escribiendo una función que simule lanzar un par de dados de 6 lados. Tu función no tomará ningún parámetro. Va a regresar el total de los dados lanzados como su único resultado. Escribe un programa principal (main) que use tu función para simular el lanzamiento de dos dados de 6 lados 1000 veces. A medida que tu programa carra, deberá contar el número de veces que el total ocurra. A continuación, deberá mostrar una tabla que resuma estos datos. Expresa la frecuencia por cada total como un porcentaje del total de lanzamientos. Tu programa también debera mostrar el porcentaje esperado por cada total de a cuerdo a la teoría de probabilidad. Solución: Definir la función dosDados: dado_uno = valor aleatorio entre 1 y 6 dado_dos = valor aleatorio entre 1 y 6 regresar dado_uno + dado_2 Definir función principal (main): Crear diccionario con cada numero posible a caer como llave y en cada valor poner la probabilidad que tiene de caer de acuerdo a la teoría Crear diccionario con cada numero posible a caer como llave y en cada valor poner 0 (se llamará CUENTAS) Por cada número en el rango (1000): lanzamiento = dosDados() CUENTAS[lanzamiento] = CUENTAS[lanzamiento] + 1 Imprimir taba con una columna con el número a caer, una columna con el porcentaje de caídas correspondente a los lanzamientos hechos y otra columna con el porcentaje esperado de acuerdo a la teoría de probabilidad """ from random import randrange NUMERO_DE_CORRIDAS = 1000 D_MAX = 6 def dosDados(): """ Simula el lanzamiento de dos dados Returns ------- Resultado de sumar los números caídos en cada dado """ d1 = randrange(1, D_MAX + 1) d2 = randrange(1, D_MAX + 1) return d1 + d2 def main(): """ Ejecuta mil lanzamientos de dos dados y registra el porcentaje de caídas de cada número (del 2 al 12) en una tabla junto con el porcentaje de acuerdo a la teoría de la probabilidad Returns ------- None. """ esperado = {2: 1/36, 3: 2/36, 4: 3/36, 5: 4/36, 6: 5/36, 7: 6/36, 8: 5/36, \ 9: 4/36, 10: 3/36, 11: 2/36, 12:1/36} cuentas = {2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0} for i in range(NUMERO_DE_CORRIDAS): t = dosDados() cuentas[t] = cuentas[t] + 1 print("Total Porcentaje Porcentaje") print(" Simulado Esperado") for i in sorted(cuentas.keys()): print("%5d %11.2f %8.2f" % \ (i, cuentas[i] / NUMERO_DE_CORRIDAS * 100, esperado[i] * 100)) main() """ Lo que se me dificultó de este problema fue entender la función sorted, para esto visite la siguiente página: https://docs.python.org/3/howto/sorting.html Aprendí que se puede usar pra iterar las llaves en un diccionario, por ejemplo: >>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) [1, 2, 3, 4, 5] """