密码猜测器无法打印足够的字符

时间:2019-04-12 20:50:38

标签: python python-3.x pycharm

这个想法是,您输入任何密码/字符,然后尝试通过尝试字母和数字的不同组合来找到您输入的密码(这确实是没有意义的)

现在的问题是“ pw_guess”一次只打印一个字母或数字。也似乎有重复项。例如,我发现字母“ e”被打印了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)

假定一次打印并尝试输入与用户输入的数字相同的字母/数字。

例如:       您在输入中键入“ password123”。那它会数多少       该用户输入中包含字符(在此示例中为11),并且       开始尝试并打印不同的字符组合。       现在,一张印刷品应包含11个随机字符。然后在某个时候       它会正确组合并停止。

如上所述,现在它一次只能打印一个字符,而且还有我不希望出现的重复字符。

我尝试在用户输入中仅输入一个字母,但它猜对了,否则效果很好。

3 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:0)

您的内部循环应将所有随机字符组合成一个密码猜测,而不是分别猜测每个字母。

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)

答案 2 :(得分:0)

从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')