import random import string lower = string.ascii_lowercase upper = string.ascii_uppercase digit = string.digits symbol = '''!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ ''' def pswGen(L, lowerF = True, upperF = True, digitF = True, symbolF = True): source = '' if lowerF : source += lower if upperF : source += upper if digitF : source += digit if symbolF: source += symbol ret = '' #print(source) for i in range(L): ret += random.sample(source, 1)[0] return ret def strength(P): def score(P, S): if bool(set(P).intersection(set(S))): return 1 return -1 ret = len(P) ret += score(P, lower) * 1 ret += score(P, digit) * 2 ret += score(P, upper) * 3 ret += score(P, symbol) * 7 ret -= (len(P.lower()) - len(set(P.lower()))) * 2 return ret class password: def __init__(self, L, lowerF = True, upperF = True, digitF = True, symbolF = True): self.__L__ = L self.__lowerF__ = lowerF source = '' if lowerF : source += lower if upperF : source += upper if digitF : source += digit if symbolF: source += symbol self.__psw__ = '' #print(source) for i in range(L): self.__psw__ += random.sample(source, 1)[0] @property def L(self): return self.__L__ @property def psw(self): return self.__psw__ @property def strength(self): def score(P, S): if bool(set(P).intersection(set(S))): return 1 return -1 ret = len(self.psw) ret += score(self.psw, lower) * 1 ret += score(self.psw, digit) * 2 ret += score(self.psw, upper) * 3 ret += score(self.psw, symbol) * 7 ret -= (len(self.psw.lower()) - len(set(self.psw.lower()))) * 2 return ret def __repr__(self): return repr(self.psw) def __str__(self): return f'password: {self.psw}' def __lt__(self, other): return self.strength < other.strength s = password(8, 1, 0,0 ,0) A = [password(15) for i in range(100)] A.sort() for ai in A: ai.strength, ai