"" .join () в python 3.7 не работает внутри def - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь сгенерировать уникальный пароль с помощью функции.Все отлично работает, кроме "".join.Помогите мне увидеть, в чем проблема в коде?Использование Python 3.7.

Мой код:

import random
import string


def password():
    a = []
    letters = string.ascii_letters
    symbols = string.punctuation
    for element in range(6):
        a.append(random.randint(0, 10))
        a.append(random.choice(letters))
        a.append(random.choice(symbols))
    random.shuffle(a)
    print(''.join(str(a)))


password()

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Когда вы вызываете join сверх str(a), вы сначала преобразуете список в строку, а затем соединяете все символы в строковом списке.

Вместо этого вы хотите преобразовать каждый элемент в a в строку.Вы должны использовать выражение генератора , например:

''.join(str(x) for x in a)

В качестве альтернативы, вы можете использовать встроенную функцию map(function, iterable), которая полезна вОбщий случай, когда вы хотите вернуть новую итерацию, содержащую результаты function, примененные к каждому элементу в iterable.Таким образом, вы должны использовать:

''.join(map(str, a))

В основном это вопрос вкуса, который вы считаете более читабельным.

0 голосов
/ 12 марта 2019

В качестве разделителя соединений вы используете пустую строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...