# Password validation specials = ['[', '@', '_', '!', '#', '$', '%', '^', '&', '*', '(', ')', '<', '>', '?', '/', '\\', '|', '}', '{', '~', ':', ']'] class PasswordValidator: def __init__(self, min_length, upper, lower, number, special): self.criteria = { "characters": int(min_length), "uppercase characters": int(upper), "lowercase characters": int(lower), "numbers": int(number), "special characters": int(special), } def validate(self, password): count = { "characters": 0, "uppercase characters": 0, "lowercase characters": 0, "numbers": 0, "special characters": 0, } for c in password: count["characters"] += 1 if c.isupper(): count["uppercase characters"] += 1 elif c.islower(): count["lowercase characters"] += 1 elif c.isnumeric(): count["numbers"] += 1 elif c in specials: count["special characters"] += 1 for criterion in count: if count[criterion] < self.criteria[criterion]: count[criterion] = False else: count[criterion] = True return count def getCriteria(self): lines = {} for criterion in self.criteria: min = self.criteria[criterion] if min > 0: text = f"Must have at least {min} " if min == 1: text += criterion[:-1] else: text += criterion lines[criterion] = text return lines