0863 - Parole

From Bitnami MediaWiki
Revision as of 15:20, 26 December 2023 by AntalKrisztian (talk | contribs) (Pagină nouă: 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 p...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>

  1. 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")


  1. 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>