Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình kiểm tra xem mật khẩu đã cung cấp có đáp ứng tiêu chí hay không bằng Python

Giả sử chúng ta có một chuỗi s, đại diện cho một mật khẩu, chúng ta phải kiểm tra các tiêu chí của mật khẩu. Có một số quy tắc mà chúng ta phải tuân theo -

  • Độ dài mật khẩu tối thiểu 8 ký tự và tối đa 20 ký tự.
  • Mật khẩu chứa ít nhất một chữ số
  • Mật khẩu chứa ít nhất một ký tự viết thường và một ký tự viết hoa
  • Mật khẩu chứa ít nhất một ký tự đặc biệt như! "# $% &\ '() * +, -. / :; <=>? @ [\\] ^ _` {|} ~
  • Mật khẩu không chứa bất kỳ ký tự nào khác như tab hoặc dòng mới.

Vì vậy, nếu đầu vào là "@ bCd12 # 4", thì đầu ra sẽ là True.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • a:=0, b:=0, c:=0, d:=0
  • nếu kích thước của mật khẩu <8 hoặc kích thước của mật khẩu> 20, thì
    • trả về Sai
  • đối với mỗi ký tự tôi trong mật khẩu, hãy thực hiện
    • nếu tôi là chữ hoa, thì
      • a:=a + 1
    • nếu không, khi tôi là chữ thường, thì
      • b:=b + 1
    • nếu không, khi tôi ở trong tập hợp các ký tự đặc biệt này '"!" # ^ modAND \' () * +, - ./:;<=>?@[\\]XOR_`{OR}~ "', thì
      • c:=c + 1
    • ngược lại, khi tôi là một chữ số, thì
      • d:=d + 1
  • nếu a> =1 và b> =1 và c> =1 và d> =1 và a + b + c + d giống với kích thước của mật khẩu, thì
    • trả về True
  • nếu không,
    • trả về Sai

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution:
   def solve(self, password):
      a=0
      b=0
      c=0
      d=0
      if len(password)<8 or len(password)>20:
         return False
      for i in password:
         if i.isupper():
            a+=1
         elif i.islower():
            b+=1
         elif i in '"!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"':
            c+=1
         elif i.isdigit():
            d+=1
      if a>=1 and b>=1 and c>=1 and d>=1 and
         a+b+c+d==len(password):
      return True
      else:
         return False
s = "@bCd12#4"
ob = Solution()
print(ob.solve(s))

Đầu vào

"@bCd12#4"

Đầu ra

True