+ 3.2_04
This commit is contained in:
parent
a8dca8a40a
commit
4a67ceca43
54
mod_oop/3.2_04_random_password.py
Normal file
54
mod_oop/3.2_04_random_password.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
"""
|
||||||
|
https://stepik.org/lesson/701987/step/4?unit=702088
|
||||||
|
|
||||||
|
Объявите класс RandomPassword для генерации случайных паролей. Объекты этого класса должны создаваться командой:
|
||||||
|
|
||||||
|
rnd = RandomPassword(psw_chars, min_length, max_length)
|
||||||
|
где psw_chars - строка из разрешенных в пароле символов; min_length, max_length - минимальная и максимальная длина генерируемых паролей.
|
||||||
|
>>> rnd = RandomPassword("abcd", 4, 6)
|
||||||
|
|
||||||
|
Непосредственная генерация одного пароля должна выполняться командой:
|
||||||
|
|
||||||
|
psw = rnd()
|
||||||
|
где psw - ссылка на строку длиной в диапазоне [min_length; max_length] из случайно выбранных символов строки psw_chars.
|
||||||
|
|
||||||
|
>>> psw = rnd()
|
||||||
|
>>> type(psw), 4 <= len(psw) <= 6, set("abcd").issuperset(psw)
|
||||||
|
(<class 'str'>, True, True)
|
||||||
|
|
||||||
|
С помощью генератора списка (list comprehension) создайте список lst_pass из трех сгенерированных паролей объектом rnd класса RandomPassword, созданного с параметрами:
|
||||||
|
|
||||||
|
min_length = 5
|
||||||
|
max_length = 20
|
||||||
|
psw_chars = "qwertyuiopasdfghjklzxcvbnm0123456789!@#$%&*"
|
||||||
|
>>> len(lst_pass)
|
||||||
|
3
|
||||||
|
|
||||||
|
P.S. Выводить на экран ничего не нужно, только создать список из паролей.
|
||||||
|
P.P.S. Дополнительное домашнее задание: попробуйте реализовать этот же функционал с использованием замыканий функций.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import random
|
||||||
|
|
||||||
|
class RandomPassword:
|
||||||
|
def __init__(self, psw_chars: str, min_length: int, max_length: int):
|
||||||
|
self.psw_chars, self.min_length, self.max_length = psw_chars, min_length, max_length
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
return ''.join(random.choices(self.psw_chars, k=random.randint(self.min_length, self.max_length)))
|
||||||
|
|
||||||
|
RandomPassword = lambda a, b, c: lambda: ''.join(random.choices(a, k=random.randint(b, c)))
|
||||||
|
|
||||||
|
rnd = RandomPassword("qwertyuiopasdfghjklzxcvbnm0123456789!@#$%&*", 5, 20)
|
||||||
|
lst_pass = [rnd() for _ in range(3)]
|
||||||
|
|
||||||
|
def tests():
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
||||||
|
tests()
|
Loading…
Reference in New Issue
Block a user