список не присоединится ко второму разу, но присоединится в первый раз

#python #string #list #passwords

Вопрос:

я хотел превратить список в строку для автоматического генератора паролей это код:

 import random
import string

print("hello welcome to the random password generator! ")
level_of_password = input("what level do you want your password to be?(weak, medium, strong): ")

list_of_words_for_password = ["obama", "apples", "mom", "your", "cyber"]
if level_of_password == "weak":
    weak_password = list(random.sample(list_of_words_for_password, 2))
    weak_password = "".join(weak_password)
    print(weak_password)

elif level_of_password == "medium":
    letters_for_password = list(string.ascii_letters)
    numbers_for_password = []
    for i in range(random.randint(10, 30)):
        numbers_for_password.append(random.randint(5, 10))
    letters_and_numbers_for_password = numbers_for_password   letters_for_password
    medium_password = [random.sample(letters_and_numbers_for_password, random.randint(5, 20))]
    medium_password = "".join(medium_password)
 

для слабого пароля он преобразует список в строку просто отлично
, но для среднего пароля, если я попытаюсь его распечатать, он выдаст мне эту ошибку:

 line 27, in <module>
    medium_password = "".join(medium_password)
TypeError: sequence item 0: expected str instance, list found
 

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

кроме того, я сам изучаю python, если вы увидите в коде что-то невыносимое для вас, пожалуйста, дайте мне знать и об этом.

Ответ №1:

Найти комментарии в строке

 import random
import string

print("hello welcome to the random password generator! ")
level_of_password = input("what level do you want your password to be?(weak, medium, strong): ")

list_of_words_for_password = ["obama", "apples", "mom", "your", "cyber"]
if level_of_password == "weak":
    weak_password = list(random.sample(list_of_words_for_password, 2))
    weak_password = "".join(weak_password)
    print(weak_password)

elif level_of_password == "medium":
    letters_for_password = list(string.ascii_letters)
    numbers_for_password = []
    for i in range(random.randint(10, 30)):
        numbers_for_password.append(random.randint(5, 10))
    letters_and_numbers_for_password = numbers_for_password   letters_for_password
    #------>
    medium_password = random.sample(letters_and_numbers_for_password, random.randint(5, 20)) # remove extra []
    #               ^^^^                                                                   ^^^^
    medium_password = "".join(map(str, medium_password)) # convert intergers to string
    #                         ^^^^^^^^^^^^^^^^^^^^^^^^^
    print(medium_password)