У меня есть этот однострочный, который отлично работает.
import random
from string import ascii_letters, digits
def pwd_generator(pwd):
password = "".join([random.choice(ascii_letters + digits) for i in range(pwd)])
print(password)
Я хотел перевести это сейчас в «нормальный» цикл for.
def pwd_generator(pwd):
password = ''
for i in range(pwd):
password.join([random.choice(ascii_letters + digits)])
print(password)
Однако в этом сценарии password
пуст.
Почему переменная пуста, когда я пытаюсь записать ее в «правильном» цикле for?
вы не являетесь присвоение значением соединения с чем-либо - поэтому его возврат теряется...
Строки неизменяемы, поэтому password.join
возвращает строку, но не сохраняет ее в пароле. Вместо этого вы должны сохранять свои строки в списке и присоединять их в конце:
password = []
for i in range(pwd):
password.append(random.choice(ascii_letters + digits)
return "".join(password)
Спасибо, это сработало. Сначала я попытался добавить строку или присоединить ее к списку, но не добавлять к списку.
вы делаете 2 разные вещи.
join
возвращает значение, и вы ничего не делаете с ним во втором примере.