Гадатель пароля не печатает достаточно символов - PullRequest
1 голос
/ 12 апреля 2019

Идея состоит в том, что вы вводите любой пароль / символы, а затем он пытается найти тот пароль, который вы ввели, пробуя различные комбинации букв и цифр (это действительно бессмысленно, да)

Проблема правильнаяТеперь pw_guess выводит только одну букву или цифру за раз.Там также, кажется, дубликаты.Например, я обнаружил, что буква «е» была напечатана 6 раз, хотя следует печатать ее только один раз.

import random

characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
pw = input("Enter a password: \n")
pw_lenght = len(pw)

while True:

    for i in range(pw_lenght):
        random_character = random.randrange(len(characters))
        pw_guess = characters[random_character]
        if pw_guess == pw:
            print('Password found!\nPassword: ', pw)
            exit()
        print(pw_guess)

Предполагается, что вы печатаете и пробуете столько букв / цифр за раз, сколькобыл введен в пользовательский ввод.

Например: Вы вводите «пароль123» для ввода.Затем он посчитает, сколько символов содержится в этом пользовательском вводе (11 в этом примере), и начнет пробовать и печатать различные комбинации символов.Один отпечаток теперь должен содержать 11 случайных символов.Тогда в какой-то момент он получит правильную комбинацию и остановится.

Как сказано выше, теперь он печатает только один символ за раз, и есть также повторяющиеся символы, которые мне не нужны.

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

Ответы [ 3 ]

1 голос
/ 12 апреля 2019
import random

characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
pw = input("Enter a password: \n")
pw_lenght = len(pw)

while True:

    for i in range(pw_lenght):
        random_character = random.randrange(len(characters))
        pw_guess = ''.join([characters[random.randrange(len(characters))] for x in range(len(pw))])
        if pw_guess == pw:
            print('Password found!\nPassword: ', pw)
            exit()
        print(pw_guess)
0 голосов
/ 13 апреля 2019

Начиная с Python 3.6, вы можете использовать random.choises, чтобы получить больше символов одновременно.

Я бы порекомендовал string -модуль для лучшей читаемости.

Очень неприятно заполнять терминал тысячами неверных догадок, поэтому я немного изменил код.

import string
import random

characters = string.digits + string.ascii_letters
password = input('Enter a password:\n')
guesses = 1

while True:
    pw_guess = ''.join(random.choices(characters, k=len(password)))
    if password == pw_guess:
        break
    guesses += 1

print('Password found!')
print(f'Password: {pw_guess}')
print(f'{guesses} guesses needed')
0 голосов
/ 13 апреля 2019

Ваш внутренний цикл должен собирать все случайные символы в один пароль, вместо того, чтобы угадывать каждую букву отдельно.

import random

characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
pw = input("Enter a password: \n")

while True:
    pw_guess = ''
    for i in range(len(pw)):
        pw_guess += random.choice(characters)
    if pw_guess == pw:
        print('Password found!\nPassword: ', pw)
        break
    print('Password not found.  Incorrect guess: ', pw_guess)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...