这个想法是,您输入任何密码/字符,然后尝试通过尝试字母和数字的不同组合来找到您输入的密码(这确实是没有意义的)
现在的问题是“ 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个随机字符。然后在某个时候 它会正确组合并停止。
如上所述,现在它一次只能打印一个字符,而且还有我不希望出现的重复字符。
我尝试在用户输入中仅输入一个字母,但它猜对了,否则效果很好。
答案 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')