Curso-lenguaje-python/python-total/dia_05/11_programa05.py
Manuel Vergara f4e9797c4b Restructure content and add notes from HolaMundo
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
2023-05-20 09:36:26 +02:00

350 lines
17 KiB
Python

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