Skip to content

Commit aabf5c2

Browse files
committed
Merge branch 'edison_lmg'
2 parents 7f2d405 + 8ebf7d1 commit aabf5c2

File tree

1 file changed

+39
-55
lines changed

1 file changed

+39
-55
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,74 @@
1-
#============================
1+
#=======================================================================================================================
22
# 49 El almacen de Papá Noel
3-
#============================
3+
#=======================================================================================================================
44

5+
# Importar librerias
56
import random
6-
import sys
7+
import re
78

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}$'
4311

12+
# Generar password aleatorio
4413
psw = ''.join(random.sample('ABC123', k=4))
4514

4615
# Inicio de juego
47-
4816
print('''
4917
\n¡Bienvenido Papá Noel, es hora de repartir regalos!
5018
\nPara abrir al almacén de juguetes digita la clave de ingreso
5119
(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.
5422
''')
5523

5624
# Inicio de bucle
5725

5826
intento = 0
5927

60-
while intento < 10:
28+
while intento <= 10:
6129

30+
# Iniciar contador
6231
intento += 1
63-
print(f'\nIntento n.° {intento}:')
6432

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()
6744

68-
if resultado == "La cadena es válida.":
45+
# Comprobar si el passwor ingresado es valido
46+
if bool(re.match(pattern, psw_in)):
6947
pass
7048
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+
''')
7253
continue
7354

55+
# Si el password fue valido comprobar si es el correcto
7456
if psw_in == psw:
7557
print('''
7658
\n La contraseña es correcta.
7759
\n¡Felicidades, a repartir juguetes!
7860
''')
79-
sys.exit()
80-
else:
61+
break
62+
else: # Si el password es incorrecto dar las pistas por cada caracter
8163
print(f'''
8264
\nLa contraseña es incorrecta. Pero descuida, te doy unas pistas:
8365
''')
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!')
9074

0 commit comments

Comments
 (0)