ADD dia 05

This commit is contained in:
Manuel Vergara 2023-04-12 21:58:48 +02:00
parent 6700d1e9f0
commit 78bd19b27b
11 changed files with 1021 additions and 0 deletions

View File

@ -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)

32
dia_05/02_funciones.py Normal file
View File

@ -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())

View File

@ -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)

View File

@ -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}")

View File

@ -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)

59
dia_05/06_lanzar_dados.py Normal file
View File

@ -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) ")

View File

@ -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}")

View File

@ -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)

View File

@ -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")

View File

@ -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))

349
dia_05/11_programa05.py Normal file
View File

@ -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!")