1
votes

Le devineur de mot de passe n'imprime pas suffisamment de caractères

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.


1 commentaires

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.


3 Réponses :


2
votes
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 commentaires

0
votes

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)


0 commentaires

0
votes

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


0 commentaires