Как сделать так, чтобы случайные буквы, цифры или символы в одном или нескольких списках не имели кавычек вокруг них? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь создать генератор случайных паролей в Python 3. Мне удалось найти проект sh, но я столкнулся с проблемой во время завершения: вместо того, чтобы моя программа просто набирала пароль, он отображал буквы один за другим в кавычках, что делает его очень неудобным для кого-то, использующего это. Это не проблема для меня, но, поскольку я новичок, я хочу научиться этому правильно.

import random

print("Welcome to the password generator! (Your password should at least total 6 characters) ")
non_capitals = "abcdefghijklmnopqrstuvwxyz"
capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
numbers = "1234567890"
symbols = "!@#¤%&/()?"
notcapcount = int(input("How many lower-case letters?"))
capcount = int(input("How many upper-case letters ?"))
numcount = int(input("How many numbers?"))
symcount = int(input("How many symbols?"))
passlen = notcapcount + capcount + numcount + symcount

password = (random.choices(non_capitals, k = notcapcount)) + (random.choices(capitals, k = capcount)) + (random.choices(numbers, k = numcount)) + (random.choices(symbols, k = symcount))

if passlen < 6:
    print("password is too short")
elif passlen >= 6:
    print(password)`

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

['r', 'r', 'i', 'k', 'W', 'W', 'B', '7', ' 6 ',' (']

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

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Вот ваш исправленный код; смотрите комментарии для деталей. Также я настоятельно рекомендую не использовать модуль random для любых задач шифрования c. См. Можно ли сгенерировать authenti c случайное число с python? о том, как это сделать правильно.

import random

print("Welcome to the password generator! (Your password should at least total 6 characters) ")
non_capitals = "abcdefghijklmnopqrstuvwxyz"
capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
numbers = "1234567890"
symbols = "!@#¤%&/()?"
notcapcount = int(input("How many lower-case letters?"))
capcount = int(input("How many upper-case letters ?"))
numcount = int(input("How many numbers?"))
symcount = int(input("How many symbols?"))
passlen = notcapcount + capcount + numcount + symcount

#get all the right characters
password = (random.choices(non_capitals, k = notcapcount)) + (random.choices(capitals, k = capcount)) + (random.choices(numbers, k = numcount)) + (random.choices(symbols, k = symcount)) 

random.shuffle(password) #randomize list order, do this first, because string is immutable
"".join(password) #make string

if passlen < 6:
    print("password is too short")
elif passlen >= 6:
    print(password)
0 голосов
/ 02 февраля 2020

Если вы ищете строку, вы можете сделать следующее:

password = ['r', 'r', 'i', 'k', 'W', 'W', 'B', '7', '6', '(']
password = "".join(password)
print(password)

Это приведет к

rrikWWB76(
...