|
| 1 | +""" |
| 2 | + * EJERCICIO: |
| 3 | + * Papá Noel tiene que comenzar a repartir los regalos... |
| 4 | + * ¡Pero ha olvidado el código secreto de apertura del almacén! |
| 5 | + * |
| 6 | + * Crea un programa donde introducir códigos y obtener pistas. |
| 7 | + * |
| 8 | + * Código: |
| 9 | + * - El código es una combinación de letras y números aleatorios |
| 10 | + * de longitud 4. (Letras: de la A a la C, Números: del 1 al 3) |
| 11 | + * - No hay repetidos. |
| 12 | + * - Se genera de manera aleatoria al iniciar el programa. |
| 13 | + * |
| 14 | + * Usuario: |
| 15 | + * - Dispone de 10 intentos para acertarlo. |
| 16 | + * - En cada turno deberá escribir un código de 4 caracteres, y |
| 17 | + * el programa le indicará para cada uno lo siguiente: |
| 18 | + * - Correcto: Si el caracter está en la posición correcta. |
| 19 | + * - Presente: Si el caracter existe, pero esa no es su posición. |
| 20 | + * - Incorrecto: Si el caracter no existe en el código secreto. |
| 21 | + * - Deben controlarse errores de longitud y caracteres soportados. |
| 22 | + * |
| 23 | + * Finalización: |
| 24 | + * - Papa Noel gana si descrifra el código antes de 10 intentos. |
| 25 | + * - Pierde si no lo logra, ya que no podría entregar los regalos. |
| 26 | + """ |
| 27 | +import random |
| 28 | + |
| 29 | + |
| 30 | +def generar_clave(): |
| 31 | + """ |
| 32 | + Se genera la clave que debe descubrir el usuario, y solo tiene 4 caracteres |
| 33 | + """ |
| 34 | + |
| 35 | + letras = ["A", "B", "C"] |
| 36 | + numeros = [1, 2, 3] |
| 37 | + union = letras + numeros |
| 38 | + |
| 39 | + return random.sample(union, k=4) |
| 40 | + |
| 41 | + |
| 42 | +def validar_clave(clave, ingreso): |
| 43 | + """ |
| 44 | + Evalua caracter por caracter para saber su estado si es correcto, presente o incorrecto |
| 45 | + """ |
| 46 | + valida_caracter = [] |
| 47 | + |
| 48 | + def evaluar(valor): |
| 49 | + |
| 50 | + if valor in clave and (ingreso.index(str(valor)) == clave.index(valor)): |
| 51 | + valida_caracter.append('Correcto') |
| 52 | + elif valor in clave: |
| 53 | + valida_caracter.append('Presente') |
| 54 | + else: |
| 55 | + valida_caracter.append('Incorrecto') |
| 56 | + |
| 57 | + for valor in ingreso: |
| 58 | + |
| 59 | + if valor.isdigit(): |
| 60 | + numero = int(valor) |
| 61 | + evaluar(numero) |
| 62 | + else: |
| 63 | + evaluar(valor) |
| 64 | + |
| 65 | + return valida_caracter |
| 66 | + |
| 67 | + |
| 68 | +def main(): |
| 69 | + """ |
| 70 | + Se le solicita al usuario ingresar una contraseña para realizar su validación |
| 71 | + """ |
| 72 | + clave = generar_clave() |
| 73 | + i = 0 |
| 74 | + |
| 75 | + mensaje = '''\n\tDebes ayudar al viejo pascuero; se le olvidó la contraseña del almacén. |
| 76 | + Tienes que descubrir la contraseña, la cual \033[1;37;47mestá compuesta por letras de la A a la C \033[0;m |
| 77 | + \033[1;37;47my por números del 1 al 3.\033[0;m Tiene una longitud de 4 caracteres. |
| 78 | + A continuación, se solicitará que ingreses la clave, tienes solo 10 intentos. |
| 79 | + ''' |
| 80 | + print(mensaje) |
| 81 | + |
| 82 | + while i < 10: |
| 83 | + i += 1 |
| 84 | + print(f'\n\tIntento {i} |{"»"*40}') |
| 85 | + clave_ingresada = input( |
| 86 | + '\n\t• Ingresa la clave(de 4 Caracteres):').upper() |
| 87 | + |
| 88 | + if len(clave_ingresada) > 5: |
| 89 | + print( |
| 90 | + '\n\nError, desperdiciaste una oportunidad, recuerda ingresa solo 4 Caracteres\n') |
| 91 | + else: |
| 92 | + |
| 93 | + validacion = validar_clave(clave, clave_ingresada) |
| 94 | + |
| 95 | + print(f'\n\t{validacion}\n') |
| 96 | + |
| 97 | + if i == 10 and (validacion.count("Correcto") != 4): |
| 98 | + print( |
| 99 | + '\n\tLamentablemente, finalizaron los intentos para descubrir la contraseña del almacén') |
| 100 | + print( |
| 101 | + '\n\tPor lo tanto, el viejo pascuero no puede entregar los regalos.') |
| 102 | + |
| 103 | + elif validacion.count("Correcto") == 4: |
| 104 | + print( |
| 105 | + '\n\t¡Felicitaciones! Lograste adivinar la clave, pueden abrir el almacén\n') |
| 106 | + break |
| 107 | + |
| 108 | + |
| 109 | +if __name__ == '__main__': |
| 110 | + main() |
0 commit comments