๐Ÿ˜€EL AHORCADO

// Some code

```python
#! EL AHORCADO

#importamos la libreria para usar CHOISE para elegir una palabara random de nuestra lista
from random import choice                  

palabras = ["chocolatada", "laberinto", "estacionamiento", "ferrari", "preparador", "microprocesador", "computadora", "kickboxing", "ninjutzu", "beretta"]
letras_correctas = []                            #?lista vacia para las letras correctas
letras_incorrectas = []                          #?lista vacia par las letras incorrectas    
intentos = 7                                     #?vidas del jugaror
acertados = 0                                    #?conteo de aciertos
juego_terminado = False                          #?variable para luego terminar el juego




#funcion 1 para que el sistema elija una palabra al azar de nuestra lista
def elige_palabra(lista_palabras):
    palabra_elegida = choice(lista_palabras)              #?con CHOICE nos saca una palabra al azar de nuestra lista que le pasamos
    letras_unicas = len(set(palabra_elegida))             #?le ponemos un SET para que de nuestra palabra elegida quede con sus letras unicas sin repetirse y con LEN contamos la cantidad de caracteres

    return palabra_elegida, letras_unicas                 #?nos retorna dos datos la palabra al azar + la cantidad de letras sin repetirse en la palabra





#funcion 2 para pedir una letra al usuario y que detecte si el usuario ingreso otro parametro no admitido
def ingresa_letra():
    letra_elegida = ''                                                  #?creamos una variable de tipo string vacia, para solo admitir string          
    valida = False                                                      #?variable para validar a posterior si la entrada del usuario esta admitida o no 
    abecedario = 'abcdefghijklmnรฑopqrstuvwxyz'                          #?creamos un abecedario completo para comprobar si la letra ingresada por el usuario esta aca, si se la admite

    while not valida:                                                   #?creamos un loop (que mientras no se cumpla como verdadero se va a repetir), para que se repita hasta que el usuario ingrese una letra o caracter valido para el juego
        letra_elegida = input(f"{usuario} elige una letra: ").lower()              #?variable de input de ingreso de la letra elegida por el usuario y con lower hacemos que transforme en minuscula el ingreso, para que no se complique luego para buscar coincidencia
        if letra_elegida in abecedario and len(letra_elegida) == 1:     #?condicion si esa letra elegida se encuentra en nuestro abecedario, pero tambien si su extencion es igual a 1 un caracter ADMITIRLO para lo siguiente
            valida = True                                               #?darlo como ingreso valido al cumplir esas do condiciones
        else:                                                           #?si no
            print(f"No has elegido una letra correcta {usuario}")                  #?imprimir parametro invalido

    return letra_elegida                                                #?asi esta funcion nos entrega una letra osea un caracter valido para que no nos proboque error a posterio






#funcion 3 que mostrara la palabra que se va formando o no, comparandola con la elegida por el sistema CHOISE
def mostrar_palabra(palabra_elegida):                #?consume el resultado de la funcion 1

    lista_oculta = []                                #?lista vacia donde al itinerar por las letras de la palabra elegida las va a colocar dentro de esta lista

    for l in palabra_elegida:                        #?itinerar por cada letra in la palabra elegida
        if l in letras_correctas:                    #?quiero que te fijes si por cada letra de la palabra elejida encuentras aรฑlguna coincidencia con las letras correctas ingresadas por el usuario y a posterior hacer lo siguiente si es asi
            lista_oculta.append(l)                   #?agrega la letra a la palabra oculta
        else:                                        #?si no hacer lo siguiente 
            lista_oculta.append(' _ ')               #?agrega el _ a la palabra oculta cifrada

    print(' '.join(lista_oculta))                    #?imprime la lista oculta donde guardamos los caracteres itinerados, usando JOIN lo hace con un espacio entre medio de cada caracter ingresado






#funcion 4 para controlar si la letra del usuario se coincide o no, y al hacer esto va a agregar a las listas variables las letras que fueron correctas y las incorrectas, tambien debe ver e ir descontando las vidas del jugador
def controlar_letra(letra_elegida, lista_oculta, vidas, acertados):           #?se alimenta con 4 cuatro parametros, el resultado de la funcion 2, + funcion 3 lista oculta + variable intentos + la variable acertados

    fin = False                                                               #?variable false para determinar a posterior cuando sea true

    if letra_elegida in lista_oculta:                                         #?damos la condicion si la letra elegida se encuentra dentro de la lista oculta hacer los siguiente  
        letras_correctas.append(letra_elegida)                                #?agregar a la variable letra correcta la letra que coincidio con lista oculta
        acertados += 1                                                        #?y a la variable acertados agregarle por cada acierto una suma de 1 acirto mas
    else:
        letras_incorrectas.append(letra_elegida)                              #?si no coincidio, agregar la letra ingresada a la lista de letras incorrectas y...
        vidas -= 1                                                            #?restar 1 a la variable vidas que arranca en 7

    if vidas == 0:                                                            #?luego vera la condicion de si las vidas del usuario llegaron a cero
        fin = perder()                                                        #?aqui el valo de la variable fin pasa a valer true, pero la invocamos con la funcion perder() que nos da mas propiedades para darle a posterior
    elif acertados == letras_unicas:                                          #?aqui vemos si el numero de aciertos es igual a la cantidad len de letras unicas de la funcion 1
        fin = ganar(lista_oculta)                                             #?aca la variable fin va a pasar a valer true, y le damos dentro un metodo llamado gana() para darle a posterior mas parametros

    return vidas, fin, acertados                                              #?nos va a devolver las vidas que le quedan a l usuario, la variable fin si sigue en false o paso a valer true si es que coincidio alguna condicion, y los aciertos  






#funcion 5 que devuelva al perder respuestas al usuario sobre que perdio todas sus vidas y cual era la palabra o lista oculta
def perder():
    print(f"Te quedaste sin vidas manito {usuario}")
    print("La palabra oculta era " + palabra)

    return True                                                                #?nos devuelve true para cambiar la variable fin a posterior






#funcion 6 que se activara si el jugador gana, con un parametro 
def ganar(palabra_descubierta):
    mostrar_palabra(palabra_descubierta)                                        #?invocamos en el la funcioin 3 de mostrar palabra
    print(f"Felicitaciones {usuario}, has encontrado la maldita palabra!!!:)")                       #?imprimimos un saludo al ganador

    return True                                                                 #?cambiamos el valor de la variable fin a true


palabra, letras_unicas = elige_palabra(palabras)                                #?ahora invoco a todas las funciones para que se alimenten entre si (primero la funcion 1 con la lista palabras y esta nos devolvia dos resultados, por lo que la almacenamos en dos variables palabra y letras unicas par usarlas a posterior)







#loop para que se reitere las funciones requeridas para solicitarle al jugador que ingrese la letra hasta perder o ganar
print("*********BIENVENIDO AL AHORCADO***********")
print("-------\n|     |\n|     O\n|    /|\\\n|     /\\\n|_________")
print("\n" + "=" * 30 + "\n")
usuario = input("Ingresa tu nombre para jugar: ")                           #?solicito un nombre para luego usarlo para ser mas personal el juego
while not juego_terminado:                                                  #?loop condicion que hasta que la variable juego terminado no pase a valer true no se detenga el loop y realize lo siguiente
    print("\n" + "=" * 30 + "\n")                                           #?detalle
    print("TU PALABRA DESCUBRIENDOCE: ")
    mostrar_palabra(palabra)                                                #?mostrara la lista oculta resultado de la funcion 3
    print("\n")
    print(f"{usuario} Tus letras incorrectas son: " + " / ".join(letras_incorrectas))  #?agrego con una barra entre medio, las letras incorrectas almacenadas en la variable
    print(f"{usuario} tus vidas restantes son: {intentos}")                           #?muestro los intentos o vidas que le quedan al jugador
    print("\n" + "=" * 30 + "\n")                                           #?detalle
    letra = ingresa_letra()                                                 #?llamamos al resultado de la funcion 2 y la meto dentro de la variable letra para luego usuarla

    intentos, terminado, acertados = controlar_letra(letra,palabra,intentos,acertados)   #?ahora hacemos uso de la funcion 4 controlar letras y le ingresamos la variable reciente letra, + seguido de la lista oculta + intentos + acertados y estos parametros dados sus resultados los guardamos en tres variables: intentos, terminado(almacenara si termina o no el juego, y aciertos para ver las vidas)

    juego_terminado = terminado                                             #?por ultimo a la variable juego terminado del principio, le damos que pase a valer lo que tien la variable terminado (que se alimenta de la variable fin, que es uno de los resultados de la funcion 4 )para definir si continua el loop o termina el juego

```

4 EJERCICIOS EXTRAS:

CODEO DEL DIA 5:

Last updated