# -*- 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]
"""