Метод join() не работает

import random

def create_pswrd():
    global password
    password = ''
    chars = '123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    length = '8'
    list_chars = list(chars)
    random_chars = random.shuffle(list_chars)
    filter1 = ''.join(random_chars)
    print(filter1)

    for i in range(int(length)):
        password += random.choice(filter1)

create_pswrd()

выдаёт ошибку:

File "C:\Users\Lenovo\Desktop\Password Generator\bin\a.py", line 10, in create_pswrd filter1 = ''.join(random_chars) TypeError: can only join an iterable


Ответы (1 шт):

Автор решения: andriy-byte

так лучше но в одну строчку и метод возвращает пароль а не меняет глобальную переменную что тоже лучше ,по умолчанию длина 8 .

def password_generator(lenght:int = 8):
    return "".join(random.sample('123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM',lenght))

но есть проблема ,random.sample не работает с длинами больше длины колекции которую он получил

поетому другое решение random.choices дне можно задавать любую длину здесь по умолчанию 64

def password_generator_(lenght: int = 64):
    return "".join(random.choices(list('123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'), k=lenght))
→ Ссылка