L'idée est que vous entrez n'importe quel mot de passe / caractère, puis il essaie de trouver ce mot de passe que vous avez entré en essayant différentes combinaisons de lettres et de chiffres (c'est vraiment inutile hein)
Le problème en ce moment est que "pw_guess" n'imprime qu'une lettre ou un chiffre à la fois. Il semble également y avoir des doublons. Par exemple, j'ai trouvé que la lettre "e" a été imprimée 6 fois, mais ne devrait l'imprimer qu'une seule fois.
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)
Il est supposé imprimer et essayer autant de lettres / chiffres à une heure correspondant au nombre d’entre eux dans la saisie utilisateur.
Par exemple: Vous tapez "password123" à l'entrée. Ensuite, il comptera combien caractères présents dans cette entrée utilisateur (11 dans cet exemple), et commence à essayer et à imprimer différentes combinaisons de caractères. Une impression doit maintenant inclure 11 caractères aléatoires. Puis à un moment donné il obtiendra la bonne combinaison et s'arrêtera.
Comme dit ci-dessus, maintenant il n'imprime qu'un caractère à la fois et il y a aussi des caractères en double que je ne veux pas.
J'ai essayé de mettre une seule lettre à l'entrée de l'utilisateur, et il l'a bien deviné, sinon cela fonctionne bien.
3 Réponses :
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)
Votre boucle interne doit rassembler tous les caractères aléatoires en une seule estimation de mot de passe, au lieu de deviner chaque lettre séparément.
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)
Depuis Python 3.6, vous pouvez utiliser random.choises pour obtenir plus de caractères à la fois.
Je recommanderais le string -module pour une meilleure lisibilité. p >
C'est très ennuyeux de remplir le terminal avec des milliers de suppositions incorrectes, donc j'ai un peu changé le code.
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')
Votre code ne permet pas de joindre plusieurs caractères aléatoires dans un mot de passe plus grand; il ne devine jamais que des lettres uniques.