Как сделать так чтобы код выводил пароль?

Здесь в коде мне надо в генератор списков передать символы из all и сделать срез. Но мне выводит ошибку.

import random
import string
num = int(input("enter a lenght of password: "))
all = [lambda: random.choice(string.ascii_lowercase),
      lambda: random.choice(string.ascii_uppercase),
      lambda: random.choice(string.digits)]
passw = "".join([x for x in all][:num])
print(passw)

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

Автор решения: CrazyElf
  • не называйте переменную all, так вы перекрываете встроенную функцию питона, можете добавить к имени подчёркивание
  • у вас список функций, их надо вызвать со скобками x():
all_ = ...
passw = "".join([x() for x in all_][:num])
                  ^^          ^^^^
→ Ссылка
Автор решения: Maxim Chyorny

Самый простой генератор паролей:

from string import ascii_letters, digits
from random import choices

lenght_of_password = int(input('Отправьте длину пароля: '))
generated_password = ''.join(choices(ascii_letters+digits, k=lenght_of_password))
print(generated_password)
→ Ссылка
Автор решения: SergFSM

У вас в списке функции, а не строка, поэтому ваш "генератор списков" работает не совсем так как вы ожидаете. И от лямбд и от списков тут можно отказаться. Получится что-то такое:

from string import ascii_letters, digits
from random import choice

passw = ''
num = int(input("enter a lenght of password: "))
for _ in range(num):
    passw += choice(ascii_letters + digits)
    
print(passw)
'''
enter a lenght of password: 15
a75V6Ou9Nmjv6fl
→ Ссылка