Генератор случайных паролей в python ошибка - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь сгенерировать генератор случайных паролей, однако мы можем использовать только определенные специальные символы, которые я перечислил, но код не работает с ошибкой, которую я не уверен, как go решить проблему; TypeError: can only concatenate str (not "list") to str.

Это часть кода, над которой я работаю.

while True:
    import string

    a  = ["!", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+"]
    from random import *
    characters = string.ascii_letters + a + string.digits
    passcode =  "".join(choice(characters) for x in range(randint(8, 12)))
    print (passcode)

Ответы [ 4 ]

1 голос
/ 29 апреля 2020

Вы должны изменить a на str:

import string
import random


a  = "!$%^&*()-_=+"
characters = string.ascii_letters + a + string.digits
passcode =  "".join(random.choice(characters) for x in range(random.randint(8, 12)))
print(passcode)

Кроме того, это плохая практика - импортировать все пространство имен random, используя from random import *.
Когда ваш код работает, вы должны опубликовать обзор кода , чтобы получить некоторые советы и улучшения.

0 голосов
/ 29 апреля 2020

Типы проверки:

import string
a  = ["!", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+"]
print(type(string.ascii_letters))  # <class 'str'>
print(type(a))  # <class 'list'>
print(type(string.digits))  # <class 'str'>

Вам необходимо либо преобразовать все list с str или все str с list до объединения, что вы должны сделать:

characters = string.ascii_letters + "".join(a) + string.digits

или

characters = list(string.ascii_letters) + a + list(string.digits)

в первом случае вы получаете characters как str, во втором как list - оба принимаются random.choice. Как примечание стороны: не import внутри l oop, достаточно import один раз.

0 голосов
/ 29 апреля 2020

Вам необходимо создать строку, используя список a, "".join(a). и будет лучше, если вы объявите свой список a за пределами l oop.

import string
import random
a  = ["!", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+"]

while True:

    characters = string.ascii_letters + "".join(a)  + string.digits

    passcode =  "".join(choice(characters) for x in range(randint(8, 12)))
    print (passcode)
0 голосов
/ 29 апреля 2020

Вы объединяете свой список со своей строкой. Вам нужно внести следующие изменения, и это должно работать.

a  = "!$%^&*()-_=+"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...