Генератор пароля с классами Python
Я пытался написать генератор пароля. И мне надо чтобы этот код содержал следующие пункты:
ООП
Lambda
Рекурсия
list comprehension
SOLID принцип(Обязательно первый и второй принцип) Это мой код:
import random,string class Passw(): generators = [lambda: random.choice(string.ascii_lowercase), lambda: random.choice(string.ascii_uppercase), lambda: random.choice(string.digits), lambda: random.choice(string.punctuation)] replacements = {"e":"3","i":"1","a":"@","o":"0","b":"6","m":"w","s":"$","8":"&","l":"L","t":"7","q":"o|","w":"W","r":"R","p":"|o"} def __init__(self,num): #length of password self.n = num def gen_password(self): password="".join([replacements[x] if x in replacements else x for x in gen_passwd(n-1)])[:n] pasw=Passw(int(input())) pasw.gen_password()
Ответы (1 шт):
Автор решения: SergFSM
→ Ссылка
Ваш код заработает если его поправить примерно так:
import random,string
class Passw:
generators = [lambda: random.choice(string.ascii_lowercase),
lambda: random.choice(string.ascii_uppercase),
lambda: random.choice(string.digits),
lambda: random.choice(string.punctuation)]
replacements = {"e":"3","i":"1","a":"@","o":"0","b":"6","m":"w","s":"$","8":"&","l":"L",
"t":"7","q":"o|","w":"W","r":"R","p":"|o"}
def __init__(self, num): #length of password
self.num = num
self.password = self.get_password()
def gen_password(self, n):
if n==0: return ''
return Passw.generators[random.randint(0,3)]() + self.gen_password(n-1)
def get_password(self):
return ''.join([Passw.replacements.get(i, i) for i in self.gen_password(self.num)])
pasw=Passw(int(input()))
pasw.password
'''
5
'[KEQj'