这个想法是你输入任何密码/字符然后它试图通过尝试不同的字母和数字组合来找到你输入的密码(它真的是没有意义的)
现在的问题是“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个随机字符。然后在某些时候它会得到正确的组合并停止。
如上所述,现在它一次只打印一个字符,并且还有我不想要的重复字符。
我已经尝试只将一个字母添加到用户输入中,并且它猜对了,所以否则它工作正常。
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)
你的内部循环应该将所有随机字符组合成一个密码猜测,而不是分别猜测每个字母。
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)
从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')