0863 - Parole
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[edit | edit source]
Se dă n o listă cu n parole. Să se determine câte dintre ele sunt parole tari.
Date de intrare[edit | edit source]
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[edit | edit source]
Fișierul de ieșire paroleout.txt va conține pe prima linie de parole tari C.
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 1000
- fiecare linie fișierului de intrare va avea cel mult 50 de caractere
Exemplul 1[edit | edit source]
- parolein.txt
5 al!ABe1Ar alfabetar a:1A Alfabetar qHj5K#.1NN
- paroleout.txt
Datele de intrare corespund restrictiilor impuse. 2
Explicație[edit | edit source]
Cele două parole tari din listă sunt: al!ABe1Ar și qHj5K#.1NN.
Exemplul 2[edit | edit source]
- parolein.txt
aceastalinedecoddepasestecele50decaractereimpuse
- paroleout.txt
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 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.")
</syntaxhighlight>