0863 - Parole
De la Universitas MediaWiki
Parolele sunt cele mai utilizate modalități de stabilire a identității unei persoane. În IT este necesară utilizarea unor parole tari, care să nu poată fi ghicite cu ajutorul unor programe specializate.
În continuare, prin parolă tare înțelegem un sir de caractere care respectă următoarele condiții:
- conține cel puțin 8 caractere
- conține cel puțin o literă mică
- conține cel puțin o literă mare
- conține cel puțin o cifră
- conține cel puțin un caracter dintre .,?!;:_@#
Cerinţa
Se dă n o listă cu n parole. Să se determine câte dintre ele sunt parole tari.
Date de intrare
Fișierul de intrare parolein.txt conține pe prima linie numărul n, iar pe fiecare dintre următoarele n linii câte o parolă.
Date de ieşire
Fișierul de ieșire paroleout.txt va conține pe prima linie de parole tari C.
Restricții și precizări
- 1 ⩽ n ⩽ 1000
- fiecare linie fișierului de intrare va avea cel mult 50 de caractere
Exemplul 1
- parolein.txt
5 al!ABe1Ar alfabetar a:1A Alfabetar qHj5K#.1NN
- paroleout.txt
Datele de intrare corespund restrictiilor impuse. 2
Explicație
Cele două parole tari din listă sunt: al!ABe1Ar și qHj5K#.1NN.
Exemplul 2
- parolein.txt
aceastalinedecoddepasestecele50decaractereimpuse
- paroleout.txt
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
# functia de validare verifica daca datele de intrare sunt in intervalul specificat
def validare(n_validare, parole_validare):
# verificam daca n este in intervalul 1-1000
if not (1 <= n_validare <= 1000):
raise ValueError # ridicam o eroare daca n nu este in intervalul 1-1000
for parola in parole_validare: # parcurgem lista de parole
# verificam daca lungimea parolei este mai mica sau egala cu 50
if len(parola) > 50:
raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse.\n")
# functia este_parola_tare verifica daca o parola este tare
def este_parola_tare(parola):
# verificam daca parola contine cel putin 8 caractere,
# cel putin o litera mica, cel putin o litera mare, cel putin o cifra si cel putin un caracter special
return (len(parola) >= 8 and any(caracter.islower() for caracter in parola)
and any(caracter.isupper() for caracter in parola) and any(
caracter.isdigit() for caracter in parola) and any(caracter in ".,?!;:_@#" for caracter in parola))
if __name__ == '__main__':
file_in = open("parolein.txt", "r")
file_out = open("paroleout.txt", "w")
try:
# citim numarul de parole
n_main = int(file_in.readline())
# citim parolele
parole_main = [file_in.readline().strip() for _ in range(n_main)]
# validam datele de intrare
validare(n_main, parole_main)
# numaram cate parole sunt tari si scriem rezultatul in fisierul de iesire
file_out.write(str(sum(este_parola_tare(parola) for parola in parole_main)) + '\n')
# daca datele de intrare nu sunt valide, afisam un mesaj de eroare
except ValueError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
# daca datele de intrare sunt incomplete, afisam un mesaj de eroare
except IndexError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse.")