From 78bd19b27b309c671482cbc376eda2a59060d6f4 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Wed, 12 Apr 2023 21:58:48 +0200 Subject: [PATCH] ADD dia 05 --- dia_05/01_metodos_ayuda_docs.py | 34 +++ dia_05/02_funciones.py | 32 +++ dia_05/03_funciones_dinamicas.py | 61 +++++ dia_05/04_ejemplo_funcion.py | 34 +++ dia_05/05_palito_mas_corto.py | 47 ++++ dia_05/06_lanzar_dados.py | 59 +++++ dia_05/07_limpiar_lista_promedio.py | 44 ++++ dia_05/08_lanzar_moneda.py | 26 +++ dia_05/09_args_indeterminados.py | 172 ++++++++++++++ dia_05/10_problemas_practicos.py | 163 +++++++++++++ dia_05/11_programa05.py | 349 ++++++++++++++++++++++++++++ 11 files changed, 1021 insertions(+) create mode 100644 dia_05/01_metodos_ayuda_docs.py create mode 100644 dia_05/02_funciones.py create mode 100644 dia_05/03_funciones_dinamicas.py create mode 100644 dia_05/04_ejemplo_funcion.py create mode 100644 dia_05/05_palito_mas_corto.py create mode 100644 dia_05/06_lanzar_dados.py create mode 100644 dia_05/07_limpiar_lista_promedio.py create mode 100644 dia_05/08_lanzar_moneda.py create mode 100644 dia_05/09_args_indeterminados.py create mode 100644 dia_05/10_problemas_practicos.py create mode 100644 dia_05/11_programa05.py diff --git a/dia_05/01_metodos_ayuda_docs.py b/dia_05/01_metodos_ayuda_docs.py new file mode 100644 index 0000000..fb140af --- /dev/null +++ b/dia_05/01_metodos_ayuda_docs.py @@ -0,0 +1,34 @@ +""" +Métodos, ayuda y documentación +""" + +dic = {'clave1': 100, 'clave2': 500} + +a = dic.popitem() + +print(a) +print(dic) + + +# Ejercicio 1 +exer1 = ",:_#,,,,,,:::____##Pyt%on_ _Total,,,,,,::#".lstrip(",:%_#") + +print(exer1) + + +# Ejercicio 2 +frutas = ["mango", "banana", "cereza", "ciruela", "pomelo"] + +frutas.insert(3, "naranja") + +print(frutas) + + +# Ejercicio 3 +marcas_smartphones = {"Samsung", "Xiaomi", "Apple", "Huawei", "LG"} + +marcas_tv = {"Sony", "Philips", "Samsung", "LG"} + +conjuntos_aislados = marcas_smartphones.isdisjoint(marcas_tv) + +print(conjuntos_aislados) diff --git a/dia_05/02_funciones.py b/dia_05/02_funciones.py new file mode 100644 index 0000000..8fe46b4 --- /dev/null +++ b/dia_05/02_funciones.py @@ -0,0 +1,32 @@ +""" +funciones +""" + +# Simpple + +def suma5(nombre): + """ + Esto es una función para decir hola + """ + print("Hola! " + nombre) + +name = input("Dime tu nombre: ") + +for i in range(5): + suma5(name) + +# return +def sumar(num1,num2): + total = num1 + num2 + return total + +resultado = sumar(10,5) + +print(resultado) + +# Ejercicio de codificación +def invertir_palabra(palabra): + reverso = palabra[::-1] + return reverso + +print(invertir_palabra("Python").upper()) diff --git a/dia_05/03_funciones_dinamicas.py b/dia_05/03_funciones_dinamicas.py new file mode 100644 index 0000000..90bd202 --- /dev/null +++ b/dia_05/03_funciones_dinamicas.py @@ -0,0 +1,61 @@ +""" +funciones Dinamicas +""" + +# Simple, comprobar numeros de 3 cifras +def chequear_3_cifras(numero): + return numero in range(100,1000) + +suma = 347 + 231 + +resultado = chequear_3_cifras(suma) +print(resultado) + + +# Comprobar de listas si los numeros tienen 3 cifras +# return hará que se pare el bucle, como un break +def chequear_3_cifras_listas(lista): + for n in lista: + if n in range(100,1000): + return True + else: + pass + # Para que el return false funcione bien debería estar indentado aquí + + +lista_num = [1,34,21,15,23,2000] +comprobacion = chequear_3_cifras_listas(lista_num) +print(comprobacion) + +## Siendo falso dará un tipo None +print(type(comprobacion)) +## No tenía un return False + + +# Ejercicio comprobar positivos +def todos_positivos(lista): + for n in lista: + if n < 0: + return False + else: + pass + return True + +lista_posibles_pos = [13,234,5343,7276,-1] + +print(todos_positivos(lista_posibles_pos)) + +# Ejercicio sumar numeros entre 0 y 1000 + +def suma_menores(lista): + resultado2 = 0 + for num in lista: + if num > 0 and num < 1000: + resultado2 += num + else: + pass + return resultado2 + +lista_numeros = [13,234,5343,7276,-1] +ver = suma_menores(lista_numeros) +print(ver) diff --git a/dia_05/04_ejemplo_funcion.py b/dia_05/04_ejemplo_funcion.py new file mode 100644 index 0000000..eb1550c --- /dev/null +++ b/dia_05/04_ejemplo_funcion.py @@ -0,0 +1,34 @@ +""" +Ejemplo de función +""" + +# Para desempacar tuples sin funciones +# por ejemplo, para saber el costo de los precios + +precios_cafe = [('capuchino',1.5),('expresso',2.2),('moka',1.9)] + +for cafe,precio in precios_cafe: + print(precio * 0.45) + +# Pero para saber cual es el café mas caro no nos sirve +# Debemos usar una función: +def cafe_mas_caro(lista_precios): + precio_mayor = 0 + cafe_mas_caro = '' + + for cafe,precio in lista_precios: + if precio > precio_mayor: + precio_mayor = precio + cafe_mas_caro = cafe + else: + pass + + return(cafe_mas_caro, precio_mayor) + +## Podemos extraer las variables que retorna la función + +cafe, precio = cafe_mas_caro(precios_cafe) + +print(f"El café más caro es {cafe} con un precio de {precio}") + + diff --git a/dia_05/05_palito_mas_corto.py b/dia_05/05_palito_mas_corto.py new file mode 100644 index 0000000..0357665 --- /dev/null +++ b/dia_05/05_palito_mas_corto.py @@ -0,0 +1,47 @@ +""" +Interacción entre funciones + +Programa "Escoge un palito" +""" +from random import shuffle + +# Lista inicial y presentación +palitos = ['-','--','---','----'] + +print("¡Hola!\n") +print(f"Tenemos estos palitos:") +for palito in palitos: + print(palito) +print("\nVamos a mezclarlos y a relacionarlos con un número.\n") + +# Mezclar palitos +def mezclar(lista): + shuffle(palitos) + return lista + +# Pedir al usuario intento +def probar_suerte(): + intento = '' + while intento not in ['1','2','3','4']: + intento = input("Elige un número del 1 al 4: ") + if intento not in ['1','2','3','4']: + print("\nError: Ingresa un valor válido\n") + else: + pass + return int(intento) + +# Comprobar intento +def chequear_intento(lista,intento): + if lista[intento - 1] == '-': + print("¡Cogiste el palito más corto!\n") + else: + print("Lo siento, no es el más corto: \n") + + print(lista[intento-1]) + print() + +# Invocamos las funciones + +palitos_mezclados = mezclar(palitos) +seleccion = probar_suerte() +chequear_intento(palitos_mezclados, seleccion) diff --git a/dia_05/06_lanzar_dados.py b/dia_05/06_lanzar_dados.py new file mode 100644 index 0000000..a42ab8b --- /dev/null +++ b/dia_05/06_lanzar_dados.py @@ -0,0 +1,59 @@ +""" +Interacción entre funciones +LANZAR DOS DADOS +""" +from random import randint + +# Función para obtener dos valores aleatorios +# entre el 1 y el 6 + + +def lanzar_dados(): + dado1 = randint(1, 6) + dado2 = randint(1, 6) + + return dado1, dado2 + +# Función para evaluar la tirada + + +def evaluar_jugada(num1, num2): + suma_dados = num1 + num2 + text1 = "La suma de tus dados es " + if suma_dados <= 4: + suma_dados = str(suma_dados) + mensaje = text1 + suma_dados + ". \nLamentable\n" + elif suma_dados > 4 and suma_dados <= 7: + suma_dados = str(suma_dados) + mensaje = text1 + suma_dados + ". \nBueno... esta bien.\n" + elif suma_dados > 7 and suma_dados < 10: + suma_dados = str(suma_dados) + mensaje = text1 + suma_dados + ". \nBuena tirada!\n" + else: + suma_dados = str(suma_dados) + mensaje = text1 + suma_dados + ". \nParece una jugada ganadora\n" + + return mensaje + + +# Presentación +print("¡Vamos a tirar los dados!\n") + +bandera = 's' +while bandera.lower() != "n": + + # Control de flujo + if bandera.lower() == 's': + # Recogida de los valores + n1, n2 = lanzar_dados() + resultado = evaluar_jugada(n1, n2) + print(f"{resultado}") + elif bandera.lower() != 'n' or bandera.lower() != 's': + print("¿Que me estás contando?\n\t Sí ---> s\n\t No ---> n") + bandera = 's' + else: + print("\n¡Ciao!") + break + + # Pregunta si quieres seguir jugando + bandera = input("¿Quieres tirar de nuevo? (s/n) ") diff --git a/dia_05/07_limpiar_lista_promedio.py b/dia_05/07_limpiar_lista_promedio.py new file mode 100644 index 0000000..00760d2 --- /dev/null +++ b/dia_05/07_limpiar_lista_promedio.py @@ -0,0 +1,44 @@ +lista_numeros = [1, 2, 15, 7, 2, 3] + + +def reducir_lista(lista): + + lista.sort() + lista_limpia = set(lista) + max_value = max(lista_limpia) + lista_limpia.remove(max_value) + return lista_limpia + + +def promedio(lista): + total = 0 + for x in lista: + total += x + resultado = total / len(lista) + return resultado + + +lista2 = reducir_lista(lista_numeros) +media = promedio(lista2) + +print(f"La lista limpia es {lista2}") +print(f"El valor medio de la lista resultante es {media}") + +# Otra opción de limpiar la lista + + +def reducir_lista2(lista): + lista.sort() + lista_limpia = [] + for n in lista: + if n not in lista_limpia: + lista_limpia.append(n) + + max_value = max(lista_limpia) + lista_limpia.remove(max_value) + return lista_limpia + + +lista3 = reducir_lista2(lista_numeros) + +print(f"Otra opción de limpiar la lista: {lista3}") diff --git a/dia_05/08_lanzar_moneda.py b/dia_05/08_lanzar_moneda.py new file mode 100644 index 0000000..d50a75b --- /dev/null +++ b/dia_05/08_lanzar_moneda.py @@ -0,0 +1,26 @@ +from random import choice + + +def lanzar_moneda(): + lista = ['Cara', 'Cruz'] + cara_moneda = choice(lista) + return cara_moneda + + +def probar_suerte(resultado, lista): + if resultado == 'Cara': + print('La lista se autodestruirá') + lista.clear() + elif resultado == 'Cruz': + print("La lista fue salvada") + else: + pass + + return lista + + +lista_numeros = [1, 3, 5, 2, 3, 145] +mon = lanzar_moneda() +mensaje = probar_suerte(mon, lista_numeros) + +print(mon, mensaje) diff --git a/dia_05/09_args_indeterminados.py b/dia_05/09_args_indeterminados.py new file mode 100644 index 0000000..df32a57 --- /dev/null +++ b/dia_05/09_args_indeterminados.py @@ -0,0 +1,172 @@ +""" +Argumentos indeterminados + +*args ---> Arguments +Para definir funciones que acepten +un número indeterminado de variables + +**kwargs ---> Keyword arguments +Definen funciones que acepten +diccionarios. Podemos añadir un número indeterminado +de variables y de key=value +""" + +# Ejemplo de *args +# Argumentos args es una tupla, no se puede modificar + + +def suma(*numeros): + resultado = 0 + for numero in numeros: + resultado += numero + return resultado + + +calculo = suma(24, 45, 22, 43, 454, 23, 12) + +print(calculo) + +# Ejercicio 1 - Suma cuadrados + + +def suma_cuadrados(*numeros): + resultado = 0 + for numero in numeros: + resultado += numero**2 + + return resultado + + +print(suma_cuadrados(1, 2, 3)) + + +# Ejercicio 2 - Suma solo absolutos + +def suma_absolutos(*numeros): + resultado = 0 + for numero in numeros: + resultado += abs(numero) + + return resultado + + +print(suma_absolutos(1, -2, 3)) + +# Ejercicio 3 - mezclar variable y *args + + +def numeros_persona(nombre, *numeros): + suma_numeros = 0 + for numero in numeros: + suma_numeros += numero + + suma_numeros = str(suma_numeros) + para_devolver = nombre + " la suma de tus números es " + suma_numeros + return para_devolver + + +print(numeros_persona("Mun", 1, 3, 4, 2, 4)) + + +# Ejemplo de **kwargs - Explicación conceptual +# Cuando pasamos los valores al kwargs +# este lo convierte en diccionario + +def suma_dic(**kwargs): + print(type(kwargs)) + + +suma_dic(x=3, y=5, z=2) + +# Otro ejemplo + + +def suma_diccio(**kwargs): + + total = 0 + + for clave, valor in kwargs.items(): + print(f"{clave} es igual a {valor}") + total += valor + return total + + +print(suma_diccio(x=3, y=5, z=2)) + + +# Con lo cual, también podemos añadir +# - Parámetros +# - *args +# - **kwargs +# Y todo en la misma función +# Deberían seguir siempre este orden + +def prueba(num1, num2, *args, **kwargs): + + print(f'El primer valor es {num1}') + print(f'El segundo valor es {num2}') + + for arg in args: + print(f"arg es igual a {arg}") + + for clave, valor in kwargs.items(): + print(f"{clave} es igual a {valor}") + + +prueba(15, 50, 100, 200, 300, 400, x='uno', y='dos', z='tres') + + +# Truco para desempacar listas o tuplas +# Poner los astericos en los argumentos que se le pasa a la función + +def la_lista(*lista, **dic): + + for arg in lista: + print(f"arg es igual a {arg}") + + for clave, valor in dic.items(): + print(f"{clave} es igual a {valor}") + + +para_args = [1000, 2000, 3000, 4000] +kwargs = {'x': 'uno', 'y': 'dos', 'z': 'tres'} + +la_lista(*para_args, **kwargs) + + +# Ejercicio 1 - cantidad de atributos + +def cantidad_atributos(**cuentas): + contador = 0 + for x in cuentas.items(): + contador += 1 + return contador + + print(len(cuentas)) + + +print(cantidad_atributos(x='color_ojos')) + +# Ejercicio 2 - Lista atributos de values + + +def lista_atributos(**lista): + listado = [] + for clave in lista.values(): + listado.append(clave) + return listado + + +print(lista_atributos(x='uno', y='dos', z='tres')) + +# Ejercicio 3 - + + +def describir_persona(nombre, **kwargs): + print(f'Características de {nombre}:') + + for nombre_argumento, valor_argumento in kwargs.items(): + print(f'{nombre_argumento}: {valor_argumento}') + + +describir_persona("María", color_ojos="azules", color_pelo="rubio") diff --git a/dia_05/10_problemas_practicos.py b/dia_05/10_problemas_practicos.py new file mode 100644 index 0000000..1a14387 --- /dev/null +++ b/dia_05/10_problemas_practicos.py @@ -0,0 +1,163 @@ +""" +Problemas prácticos +""" + +# Ejercicio ############ +# Crea una función llamada devolver_distintos() que reciba 3 integers como parámetros. +# Si la suma de los 3 números es mayor a 15, va a devolver el número mayor. +# Si la suma de los 3 números es menor a 10, va a devolver el número menor. +# Si la suma de los 3 números es un valor entre 10 y 15 (incluidos) va a devolver el número de valor intermedio. + + +def devolver_distintos(num1, num2, num3): + suma = num1 + num2 + num3 + lista = [num1, num2, num3] + if suma > 15: + return max(lista) + elif suma < 10: + return min(lista) + else: + lista.sort() + return lista[1] + + +print(devolver_distintos(6, 5, 3)) + + +# Ejercicio 2 ############ +# Escribe una función (puedes ponerle cualquier nombre que quieras) +# que reciba cualquier palabra como parámetro, +# y que devuelva todas sus letras únicas (sin repetir) pero en orden alfabético. +# Por ejemplo si al invocar esta función pasamos la palabra "entretenido", +# debería devolver ['d', 'e', 'i', 'n', 'o', 'r', 't'] + +def cualquier(palabra): + mi_set = set() + for letra in palabra: + mi_set.add(letra) + + lista = list(mi_set) + lista.sort() + return lista + + +print("\n") +print(cualquier('entretenido')) +print(cualquier('cascarrabias')) + + +# Ejercicio 3 ############ +# Escribe una función que requiera una cantidad indefinida de argumentos. +# Lo que hará esta función es devolver True +# si en algún momento se ha ingresado al numero cero repetido dos veces consecutivas. +# Por ejemplo: +# (5,6,1,0,0,9,3,5) >>> True +# (6,0,5,1,0,3,0,1) >>> False + +def me_gustan_los_ceros(*ceros): + + contador = 0 + for num in ceros: + + if num == 0: + contador += 1 + if contador == 2: + contador = 0 + return True + elif num != 0: + contador = 0 + else: + pass + + return False + + +print("\n") +print(me_gustan_los_ceros(5, 6, 1, 0, 0, 9, 3, 5)) +print(me_gustan_los_ceros(6, 0, 5, 1, 0, 3, 0, 1)) + +# Solución curso + + +def ceros_vecinos(*args): + contador = 0 + + for num in args: + + if contador + 1 == len(args): + return False + elif args[contador] == 0 and args[contador + 1] == 0: + return True + else: + contador += 1 + return False + + +print("\n") +print(ceros_vecinos(5, 6, 1, 0, 0, 9, 3, 5)) +print(ceros_vecinos(6, 0, 5, 1, 0, 3, 0, 1)) + + +# Ejercicio 4 ############ +# Escribe una función llamada contar_primos() que requiera un solo argumento numérico. +# Esta función va a mostrar en pantalla todos los números primos existentes +# en el rango que va desde cero hasta ese número incluido, +# y va a devolver la cantidad de números primos que encontró. +# Aclaración, por convención el 0 y el 1 no se consideran primos. + + +def primo(numero): + if numero == 0 or numero == 1 or numero == 4: + return False + for x in range(2, int(numero/2)): + if numero % x == 0: + return False + return True + + +def primos(rango_max): + rango_max += 1 + + lista_num = [n for n in range(1, rango_max)] + + primos = [] + + for numero in lista_num: + es_primo = primo(numero) + if es_primo: + primos.append(numero) + contar = len(primos) + + rango_max -= 1 + print(f"\nEntre 0 y el {rango_max} hay {contar} números primos:") + + print(*primos, sep=' ') + + +primos(1000) + + +# Solución curso + +def contar_primos(numero): + primos2 = [2] + iteracion = 3 + + if numero < 2: + return 0 + + while iteracion <= numero: + for n in range(3, iteracion, 2): + if iteracion % n == 0: + iteracion += 2 + break + else: + primos2.append(iteracion) + iteracion += 2 + + print(primos2) + return len(primos2) + + +print("\n") +print(contar_primos(1000)) diff --git a/dia_05/11_programa05.py b/dia_05/11_programa05.py new file mode 100644 index 0000000..d7a5427 --- /dev/null +++ b/dia_05/11_programa05.py @@ -0,0 +1,349 @@ +''' +Programa día 5 - Juego del ahorcado +''' +from random import choice +import os + + +def clearConsole(): + # Función limpiar consola + command = 'clear' + if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls + command = 'cls' + os.system(command) + + +def palabra_aleatoria(): + # Función que guarda palabras en una lista y escoge una aleatoria con choice + lista_palabras = ('Argentina', 'Colombia', 'Guadalupe', 'Herramientas', 'Hogar', 'Murcielago', + 'Uruguay', 'abdomen', 'abrelatas', 'abrigo', 'abuelo', 'aburrimiento', + 'accion', 'agridulce', 'aguila', 'aguja', 'ahorcado', 'aire', + 'alegria', 'Alemania', 'alfabeto', 'alimento', 'alma', 'almacen', + 'almendra', 'alto', 'altura', 'amanecer', 'amarillo', 'ambiente', + 'ambulancia', 'amiga', 'amigo', 'amor', 'analisis', 'ancho', + 'anciano', 'animal', 'anochecer', 'aparato', 'apartamento', 'apoyo', + 'araña', 'arbol', 'archiduque', 'area', 'aritmetica', 'arma', + 'arroz', 'arte', 'articulo', 'ascensor', 'asiento', 'asociacion', + 'aspecto', 'ataque', 'atencion', 'atmosfera', 'atomo', 'atun', + 'aumento', 'autobus', 'automovil', 'coche', 'auto', 'autopista', + 'autor', 'autoridad', 'avance', 'avena', 'avenida', 'avion', + 'ayer', 'ayuda', 'azul', 'año', 'babosa', 'baloncesto', + 'bambu', 'barba', 'barco', 'barro', 'lodo', 'base', + 'bateria', 'bebe', 'bebida', 'beneficio', 'bicho', 'bigote', + 'billete', 'bisabuelo', 'bisnieto', 'blanco', 'boca', 'boleto', + 'bolsa', 'bolsillo', 'bolso', 'bomberos', 'bondad', 'bosque', + 'boton', 'bragas', 'calzon', 'brazo', 'buey', 'bufanda', + 'bus', 'busqueda', 'caballo', 'yegua', 'cabello', 'cabeza', + 'cable', 'cabo', 'cadera', 'calamar', 'calcetines', 'calculadora', + 'calendario', 'calidad', 'calle', 'calor', 'calzoncillo', 'cama', + 'camara', 'camaron', 'cambio', 'camino', 'camisa', 'camiseta', + 'campaña', 'campo', 'cansancio', 'cantidad', 'capacidad', 'capital', + 'cara', 'caracol', 'caracter', 'caracteristica', 'cargo', 'carne', + 'carpeta', 'carrera', 'carretera', 'carta', 'cartera', 'casa', + 'casco', 'caso', 'castaña', 'castaño', 'causa', 'cebada', + 'celeste', 'celular', 'centimetro', 'cerdo', 'cerebro', 'cero', + 'cerradura', 'cerro', 'monte', 'montaña', 'cesped', 'chaqueta', + 'chino', 'cielo', 'cien', 'ciento', 'ciencia', 'cierre', + 'ciervo', 'cinco', 'cine', 'cintura', 'cinturon', 'circulo', + 'ciruela', 'ciudad', 'claridad', 'clase', 'clavel', 'clavo', + 'clima', 'club', 'cocodrilo', 'codigo', 'codo', 'cola', + 'colega', 'colegio', 'color', 'coma', 'comercio', 'comida', + 'comienzo', 'comision', 'compañia', 'competencia', 'competicion', + 'competencia', 'computadora', 'comunicacion', 'comunidad', 'concepto', + 'conciencia', 'condicion', 'conejo', 'conexion', 'confianza', 'conflicto', + 'congreso', 'conjunto', 'conocido', 'conocimiento', 'consecuencia', 'consejo', + 'constitucion', 'construccion', 'consumo', 'contenido', 'control', 'corazon', + 'cordones', 'corriente', 'corte', 'cosa', 'costa', 'creacion', + 'crecimiento', 'cremallera', 'criatura', 'crisis', 'cuaderno', 'cuadro', + 'cuarto', 'cuatro', 'cucaracha', 'cuello', 'cuenta', 'cuerda', + 'cordel', 'cordon', 'cuerpo', 'cuervo', 'cuestion', 'culo', + 'cultura', 'curiosidad', 'curso', 'dama', 'dato', 'decada', + 'decision', 'decreto', 'dedo', 'defensa', 'demanda', 'democracia', + 'departamento', 'deporte', 'derecha', 'derecho', 'desarrollo', 'deseo', + 'desierto', 'despejado', 'destino', 'destruccion', 'deterioro', 'dia', + 'diagonal', 'diario', 'diarrea', 'dibujo', 'diccionario', 'dictadura', + 'diente', 'diez', 'diferencia', 'dinero', 'dios', 'direccion', + 'director', 'disposición', 'documento', 'dolor', 'domingo', 'don', + 'dormitorio', 'dos', 'doña', 'dragon', 'duda', 'economia', + 'edad', 'edificio', 'educacion', 'efecto', 'ejemplo', 'eleccion', + 'electricidad', 'elefante', 'elemento', 'elevador', 'empatia', 'empleo', + 'empresa', 'encuentro', 'energia', 'enfermedad', 'enojo', 'enfado', + 'entorno', 'entrada', 'entretenimiento', 'epoca', 'equipo', 'equivocacion', + 'era', 'escalera', 'escritorio', 'escritura', 'escuela', 'escultura', + 'esfera', 'esfuerzo', 'espacio', 'espalda', 'español', 'especie', + 'espectaculo', 'espectador', 'espera', 'espinilla', 'espiritu', 'esposa', + 'esposo', 'esquina', 'estacion', 'parada', 'estado', 'este', + 'estilo', 'estomago', 'estrella', 'estructura', 'estruendo', 'estudio', + 'etapa', 'existencia', 'exito', 'experiencia', 'expresion', 'extasis', + 'exterior', 'fabrica', 'facilidad', 'falda', 'falta', 'familia', + 'fase', 'favor', 'fecha', 'ferrocarril', 'figura', 'fin', + 'final', 'flor', 'fondo', 'forma', 'formacion', 'formalidad', + 'fracaso', 'frances', 'frente', 'fruta', 'fuego', 'fuerza', + 'funcion', 'futuro', 'gafas', 'galaxia', 'galleta', 'gallina', + 'gas', 'gaseosa', 'gato', 'gente', 'geografia', 'gluteos', + 'gobernador', 'intendente', 'alcalde', 'gobierno', 'gorrion', 'grabado', + 'grado', 'gramo', 'gripe', 'gris', 'grupo', 'guerra', + 'guitarra', 'habitacion', 'halcon', 'harina', 'hermano', 'hielo', + 'hierro', 'higado', 'hijo', 'hilo', 'historia', 'hogar', + 'hoja', 'hombre', 'hombro', 'hongo', 'hora', 'hotel', + 'hoy', 'hueso', 'humanidad', 'humano', 'idea', 'extranjero', + 'imagen', 'individuo', 'informacion', 'informatica', 'informe', 'ingles', + 'inicio', 'insecto', 'instante', 'instituto', 'intento', 'interes', + 'interior', 'interrupcion', 'investigacion', 'izquierda', 'japones', + 'jirafa', 'joroba', 'judias', 'guisantes', 'jueves', 'juguete', + 'julio', 'kilo', 'kilometro', 'labio', 'lado', 'lagarto', + 'laguna', 'lago', 'langosta', 'largo', 'longitud', 'leon', + 'ley', 'libertad', 'libro', 'libros', 'limon', 'litro', + 'llave', 'llero', 'lluvia', 'logro', 'lombriz', 'loro', + 'lugar', 'luna', 'lunes', 'luz', 'madre', 'manantial', + 'manera', 'manga', 'mano', 'manzana', 'mar', 'oceano', + 'maravilla', 'mariposa', 'marisco', 'marron', 'cafe', 'martes', + 'matrimonio', 'mausoleo', 'mayoria', 'mañana', 'medida', 'mediodia', + 'mejora', 'memoria', 'mente', 'mentira', 'mercado', 'mes', + 'mesa', 'metal', 'metalico', 'metro', 'miedo', 'miercoles', + 'mil', 'milenio', 'milimetro', 'millon', 'ministro', 'minoria', + 'minuto', 'modo', 'molecula', 'molusco', 'momento', 'moneda', + 'mono', 'mosca', 'mosquito', 'movimiento', 'mueble', 'muerte', + 'mujer', 'mundo', 'municipio', 'musculo', 'musica', 'muslo', + 'muñeca', 'nacimiento', 'nacion', 'naranja', 'naranja', 'anaranjado', + 'nariz', 'naturaleza', 'necesidad', 'negro', 'nieto', 'nieve', + 'nivel', 'niño', 'noche', 'nombre', 'norma', 'norte', + 'notas', 'noticia', 'nublado', 'nueve', 'nuez', 'numero', + 'objetivo', 'meta', 'objeto', 'obligacion', 'obra', 'ocasion', + 'ocho', 'oeste', 'oficina', 'oido', 'ojo', 'olfato', + 'omnibus', 'orden', 'ordenador', 'oreja', 'organizacion', 'origen', + 'oro', 'oveja', 'padre', 'pais', 'pajaro', 'palabra', + 'palma', 'panel', 'pantalla', 'pantalon', 'papel', 'paraguas', + 'parasol', 'pareja', 'parlamentario', 'congresista', 'senador', 'diputado', + 'parlante', 'parte', 'partido', 'pasado', 'paso', 'pasto', + 'cesped', 'pata', 'patatas', 'papas', 'paz', 'pecho', + 'pelusa', 'pensamiento', 'pera', 'percepcion', 'periferia', 'periodico', + 'periodismo', 'perjuicio', 'permiso', 'perro', 'persona', 'personalidad', + 'peso', 'pez', 'pie', 'piel', 'pierna', 'pilar', + 'pino', 'pintura', 'piscina', 'piso', 'placer', 'planeta', + 'planta', 'plata', 'platano', 'playa', 'plomo', 'poblacion', + 'policia', 'polilla', 'politica', 'politico', 'pomelo', 'pomo', + 'posavasos', 'posibilidad', 'posicion', 'potencia', 'precio', 'tarifa', + 'pregunta', 'prenda', 'presencia', 'presente', 'presidente', 'primo', + 'principio', 'probabilidad', 'problema', 'proceso', 'produccion', 'producto', + 'profesion', 'programa', 'progreso', 'prohibicion', 'provincia', 'proyecto', + 'pueblo', 'puerta', 'pulpo', 'punto', 'quejido', 'rabano', + 'raiz', 'raiz', 'origen', 'fuente', 'rana', 'raton', + 'rata', 'rayo', 'razon', 'realidad', 'rectangulo', 'recuerdo', + 'reduccion', 'relacion', 'religion', 'representante', 'reproduccion', + 'resfriado', 'respuesta', 'resultado', 'retroceso', 'reunion', 'revista', + 'rio', 'rodilla', 'rojo', 'ropa', 'rosa', 'rosado', 'ruta', + 'sabado', 'sal', 'salchicha', 'saltamontes', 'salud', 'sandia', + 'sangre', 'sardina', 'secreto', 'sector', 'secuencia', 'segundo', + 'seguridad', 'seis', 'selva', 'jungla', 'semana', 'semilla', + 'sensacion', 'sentido', 'ser', 'serie', 'serpiente', 'servicio', + 'señor', 'señora', 'siete', 'siglo', 'significado', 'silla', 'simbolo', + 'similitud', 'sistema', 'situacion', 'sobrino', 'sociedad', 'sol', + 'solapa', 'cuello', 'solicitud', 'solucion', 'sombrilla', 'sonido', + 'sorpresa', 'subterraneo, metro', 'suciedad', 'suelo', 'suerte', + 'sugerencia', 'sujetador', 'sosten', 'superficie', 'sur', + 'sustancia', 'susto', 'tacto', 'tallo', 'talon', 'tamaño', 'tarde', + 'tarima', 'telefono', 'televidente', 'tema', 'temor', 'texto', + 'tiempo', 'tierra', 'tigre', 'tio', 'tipo', 'tomate', 'tormenta', + 'torrefacto', 'total', 'trabajo', 'trafico', 'trancar', 'transaccion', + 'transcurso', 'transito', 'transporte', 'trasero', 'tren', 'tres', + 'triangulo', 'trigo', 'tristeza', 'trueno', 'tulipan', 'universidad', + 'universo', 'uno', 'uso', 'utilizacion', 'utensilio', 'uña', 'vaca', + 'vacaciones', 'valor', 'vanidad', 'vapor', 'vaso', 'vegetal', + 'vehiculo', 'velocidad', 'ventana', 'verano', 'verdad', 'verde', + 'verdura', 'vez', 'via', 'vida', 'vidrio', 'viento', 'viernes', + 'villa', 'violeta', 'violin', 'visita', 'vista', 'volumen', + 'voz', 'vuelto, cambio', 'xilofonoGente', 'zanahoria', + 'region', 'zapatilla', 'zapato', 'zona') + + palabra_secreta = choice(lista_palabras).lower() + + palabra_secreta = palabra_secreta.replace('á', 'a').replace('é', 'e').replace( + 'í', 'i').replace('ó', 'o').replace('ú', 'u') + + return palabra_secreta + + +def mostrar_guiones(palabra_secreta): + # Recibe la palabra de la función anterior. + # Crea los guiones y separa las letras en una lista + clave = 0 + dic = {} + rallitas = {} + + for i in palabra_secreta: + clave += 1 + dic[clave] = i + + rallitas[clave] = '-' + + return dic, rallitas + + +def mostrar_letras_acertadas(): + + cuenta_letra = 0 + for k, v in dic_letras.items(): + + if v == letra_user: + cuenta_letra += 1 + dic_guiones[k] = letra_user + else: + pass + + if cuenta_letra == 1: + sing_plural = 'letra' + else: + sing_plural = 'letras' + + print(f'Desvelamos {cuenta_letra} {sing_plural}: ') + print(*dic_guiones.values(), sep=' ') + print() + + +def ahorcado_intentos(): + if intentos == 6: + print(" ____") + print(" | |") + print(" | ") + print(" | ") + print(" | ") + print("_|_") + elif intentos == 5: + print(" ____") + print(" | |") + print(" | O") + print(" | ") + print(" | ") + print("_|_") + elif intentos == 4: + print(" ____") + print(" | |") + print(" | O") + print(" | |") + print(" | ") + print("_|_") + elif intentos == 3: + print(" ____") + print(" | |") + print(" | O") + print(" | /|") + print(" | ") + print("_|_") + elif intentos == 2: + print(" ____") + print(" | |") + print(" | O") + print(" | /|\\") + print(" | ") + print("_|_") + elif intentos == 1: + print(" ____") + print(" | |") + print(" | O") + print(" | /|\\") + print(" | / ") + print("_|_") + + +# Limpiar la terminal +clearConsole() + +# Mensaje bienvenida +print('\n###################') +print('JUEGO - El ahorcado') +print('###################\n') + +# Escoger palabra aleatoria +secret = palabra_aleatoria() + +# Extraer diccionario de guiones con el número de letras de la palabra +# Extraer diccionario con letras de la palabra con indice +dic_letras, dic_guiones = mostrar_guiones(secret) + +# ############## PRUEBAS + +# print(*dic_letras, sep=' ') +# print(*dic_letras.values(), sep=' ') + +# Iniciar variable de INTENTOS +intentos = 8 +SECRET = secret.upper() + +# Instrucciones juego +print( + f'\nTu palabra tiene {len(dic_letras)} letras y tienes {intentos} intentos para acertarla.\n¡Suerte!\n' +) + +# Mostrar guiones +print(*dic_guiones.values(), sep=' ') +print() + + +# Pedir letra a usuario +comando = '' +# listado para letras incorrectas y acertadas +incorrectas = list() +acertadas = list() + +while comando.lower() != 'salir': + + letra_user = input('Dime una letra: ') + comando = letra_user + # Validar letra + + # Comando salir + if letra_user == 'salir': + print('\n\n¡Ciao!\n') + break + + # # Letra ya acertada + elif letra_user in acertadas: + print('\nEsa letra ya la acertaste primo...\n') + + elif letra_user in incorrectas: + print('\n¡Perdiendo intentos a lo loco! ¡A lo loco!\n') + intentos -= 1 + ahorcado_intentos() + print('\nTe quedan {intentos} intentos\n') + # # acierto - Desvelar letra + elif letra_user in dic_letras.values(): + print('\n¡Ole!') + acertadas.append(letra_user) + + # Mostrar guiones y letras acertadas + mostrar_letras_acertadas() + + # # fallo. Restar intentos + else: + intentos -= 1 + incorrectas.append(letra_user) + print(f'Lo siento, no has acertado. Te quedan {intentos} intentos\n') + ahorcado_intentos() + print('\nTus errores por ahora: ') + print(*incorrectas, sep=', ') + print() + + # Comprobación game over / Win / nuevo intento + if intentos == 0: + clearConsole() + print(" ____") + print(" | |") + print(" | O") + print(" | /|\\ \t\tGAME OVER") + print(" | / \\") + print("_|_") + print(f'\n\nLa palabra era: {SECRET}\n') + + break + + # Controlar si tiene la palabra correcta + elif '-' not in dic_guiones.values(): + clearConsole() + print('\n\n\n\n\n\n\n\t\t\tWIN\t\t\t\n\n\n\n\n\n\n') + print(f'La palabra era: {SECRET}\nTe sobraron {intentos} intentos\n') + break + + # Nuevo intento + else: + print("¡Inténtalo de nuevo!")