s1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

Ejercicio: 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

Propuesta de solución al ejercicio.

Estado del juego:  F***
 adivine una letra: C
 Adivinaste...C

Estado del juego:  FC**
turno: 1
fallas:  0
 adivine una letra: M
 Adivinaste...M

Estado del juego:  FC*M
turno: 2
fallas:  0
 adivine una letra: A
 NO es una letra de palabra...

Estado del juego:  FC*M
turno: 3
fallas:  1
 adivine una letra: N
 Adivinaste...N

Estado del juego:  FCNM
turno: 4
fallas:  1
Felicitaciones, adivinó: FCNM
>>> 

Algoritmo en Python

Siguiendo las sugerencias, para dividir y simplificar el problema, primero se crean las funciones: escondeletras(secreta) y cambialetra(secreta,letra,estado).

Se inicia con la selección aleatoria de la palabra secreta y el sorteo de la letra pista, verificando que sea consonante.

Se actualiza la palabra secreta con la letra pista, y se inicia el juego.

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)
# propuesta de solución: edelros@espol.edu.ec
# tarea: indiferente usar mayúsculas/minúsculas
#        contar solo letras adivinadas, no repetidas

import numpy as np
import random as rnd

def escondeletras(secreta):
    estado = ''
    n = len(secreta)
    i = 0
    while not(i>=n):
        estado = estado + '*'
        i = i + 1 
    return(estado)

def cambialetra(secreta,letra,estado):
    nuevoestado = ''
    n = len(secreta)
    i = 0
    while not(i>=n):
        if (secreta[i]==letra):
            nuevoestado = nuevoestado + letra
        else:
            nuevoestado = nuevoestado + estado[i]
        i = i + 1
    return(nuevoestado)

# PROGRAMA JUEGO
# selecciona secreta
palabras = ['ESPOL','FCNM','FIEC','FIMCP','FICT']
n = len(palabras)
sorteo  = int(rnd.random()*n)+0
secreta = palabras[sorteo]

# estado inicial del juego
estado = escondeletras(secreta)

# una letra como pista
consonante = 'BCDFGHJKLMNPQRSTVWXYZ'
m = len(secreta)
sorteo = int(rnd.random()*m)+0
pista = secreta[sorteo]
while not(pista in consonante):
    sorteo = int(rnd.random()*m)+0
    pista  = secreta[sorteo]
    
# actualiza estado del juego
estado = cambialetra(secreta,pista,estado)

# Control del Juego
turnomax = 2*m
gana  = 1
falla = 0
print('Estado del juego: ', estado)

turno = 1
while not(turno>turnomax or gana==m):
    letra = input(' adivine una letra: ')
    if (letra in secreta):
        gana    =  gana +1
        estado  = cambialetra(secreta,letra, estado)
        mensaje = ' Adivinaste...' + letra
    else:
        falla   = falla + 1
        mensaje = ' NO es una letra de palabra...'
    
    print(mensaje)
    print()
    print('Estado del juego: ', estado)
    print('turno:', turno)
    print('fallas: ', falla)
    turno = turno + 1

if (turno<=turnomax and gana==m):
    mensaje = 'Felicitaciones, adivinó: ' + secreta
else:
    mensaje = 'lo lamento, perdió..., la palabra era: '
    mensaje = mensaje + secreta

# SALIDA
print(mensaje)

Recuerde que se ha dejado como tarea, realizar las instrucciones para cumplir que:
– sea indiferente usar mayúsculas/minúsculas
– contar solo letras adivinadas, no repetidas

Referencia: 2Eva_IT2005_T3 Adivina palabra (ahorcado)

Solución propuesta: s2Eva_IT2005_T3 Adivina palabra (ahorcado)