|
1 |
| -#============================ |
| 1 | +#======================================================================================================================= |
2 | 2 | # 49 El almacen de Papá Noel
|
3 |
| -#============================ |
| 3 | +#======================================================================================================================= |
4 | 4 |
|
| 5 | +# Importar librerias |
5 | 6 | import random
|
6 |
| -import sys |
| 7 | +import re |
7 | 8 |
|
8 |
| -# Funcion que comprueba errores |
9 |
| - |
10 |
| -def validar_cadena(cadena): |
11 |
| - |
12 |
| - if len(cadena) != 4: |
13 |
| - return "Error: La cadena debe tener exactamente 4 caracteres." |
14 |
| - |
15 |
| - errores = [] |
16 |
| - |
17 |
| - for char in cadena: |
18 |
| - if char not in "ABC123": |
19 |
| - errores.append(f"'{char}'") |
20 |
| - |
21 |
| - if len(set(cadena)) != len(cadena): |
22 |
| - errores.append("Los caracteres no deben repetirse") |
23 |
| - |
24 |
| - if errores: |
25 |
| - return f"Error: {', '.join(errores)}. Solo se permiten A, B, C, 1, 2, y 3, y sin repeticiones." |
26 |
| - |
27 |
| - return "La cadena es válida." |
28 |
| - |
29 |
| -# Funcion que comprueba la contraseña ingresada |
30 |
| - |
31 |
| -def comprobar_psw(psw_in, psw): |
32 |
| - |
33 |
| - for x, y in zip(psw_in, psw): |
34 |
| - |
35 |
| - if x == y: |
36 |
| - print(f'\n{x}: Correcto') |
37 |
| - elif x in psw: |
38 |
| - print(f'\n{x}: Presente') |
39 |
| - else: |
40 |
| - print(f'\n{x}: Incorrecto') |
41 |
| - |
42 |
| -# Generar una cadena aleatoria de 4 caracteres |
| 9 | +# Expresion regular para password |
| 10 | +pattern = r'^(?!.*(.).*\1)[ABC123]{4}$' |
43 | 11 |
|
| 12 | +# Generar password aleatorio |
44 | 13 | psw = ''.join(random.sample('ABC123', k=4))
|
45 | 14 |
|
46 | 15 | # Inicio de juego
|
47 |
| - |
48 | 16 | print('''
|
49 | 17 | \n¡Bienvenido Papá Noel, es hora de repartir regalos!
|
50 | 18 | \nPara abrir al almacén de juguetes digita la clave de ingreso
|
51 | 19 | (tienes 10 intentos).
|
52 |
| - \nPista: La clave son 4 dígitos alfanuméricos con letras de la A la C |
53 |
| -y números del 1 al 3, en mayúsculas y sin repeticiones. |
| 20 | + \nPista: La contraseña debe contener 4 caracteres sin repeticiones y solo acepta |
| 21 | +los valores A,B,C,1,2 y 3. |
54 | 22 | ''')
|
55 | 23 |
|
56 | 24 | # Inicio de bucle
|
57 | 25 |
|
58 | 26 | intento = 0
|
59 | 27 |
|
60 |
| -while intento < 10: |
| 28 | +while intento <= 10: |
61 | 29 |
|
| 30 | + # Iniciar contador |
62 | 31 | intento += 1
|
63 |
| - print(f'\nIntento n.° {intento}:') |
64 | 32 |
|
65 |
| - psw_in = input('\nIngresa contraseña: ') |
66 |
| - resultado = validar_cadena(psw_in) |
| 33 | + # Si se excedio de 10 intentos terminar el juego |
| 34 | + if intento > 10: |
| 35 | + print(''' |
| 36 | + \n¡Oh, no. Papá Noel has olvidado la contraseña! |
| 37 | + Ya no te quedan más intentos. |
| 38 | + ''') |
| 39 | + break |
| 40 | + |
| 41 | + # Solicitar el ingreso de un password |
| 42 | + print(f'\nIntento n.° {intento}:') |
| 43 | + psw_in = input('\nIngresa contraseña: ').upper() |
67 | 44 |
|
68 |
| - if resultado == "La cadena es válida.": |
| 45 | + # Comprobar si el passwor ingresado es valido |
| 46 | + if bool(re.match(pattern, psw_in)): |
69 | 47 | pass
|
70 | 48 | else:
|
71 |
| - print(resultado) |
| 49 | + print(''' |
| 50 | + \nLa contarseña ingresada no es válida. La contraseña debe contener 4 |
| 51 | +caracteres sin repeticiones y solo acepta los valores A,B,C,1,2 y 3. |
| 52 | + ''') |
72 | 53 | continue
|
73 | 54 |
|
| 55 | + # Si el password fue valido comprobar si es el correcto |
74 | 56 | if psw_in == psw:
|
75 | 57 | print('''
|
76 | 58 | \n La contraseña es correcta.
|
77 | 59 | \n¡Felicidades, a repartir juguetes!
|
78 | 60 | ''')
|
79 |
| - sys.exit() |
80 |
| - else: |
| 61 | + break |
| 62 | + else: # Si el password es incorrecto dar las pistas por cada caracter |
81 | 63 | print(f'''
|
82 | 64 | \nLa contraseña es incorrecta. Pero descuida, te doy unas pistas:
|
83 | 65 | ''')
|
84 |
| - comprobar_psw(psw_in, psw) |
85 |
| - |
86 |
| -print(''' |
87 |
| - \n¡Oh, no. Papá Noel has olvidado la contraseña! |
88 |
| -Ya no te quedan más intentos. |
89 |
| - ''') |
| 66 | + for x, y in zip(psw_in, psw): |
| 67 | + if x == y: |
| 68 | + print(f'\n{x}: Correcto') |
| 69 | + elif x in psw: |
| 70 | + print(f'\n{x}: Presente') |
| 71 | + else: |
| 72 | + print(f'\n{x}: Incorrecto') |
| 73 | + print('\n¡Vuelve a intentarlo, Papá Noel!') |
90 | 74 |
|
0 commit comments