【问题标题】:Word guesser doesn't print enough characters单词猜测器没有打印足够的字符
【发布时间】:2019-04-12 20:50:38
【问题描述】:

这个想法是你输入任何密码/字符,然后它会尝试通过尝试不同的字母和数字组合来找到你输入的单词(这真的没有意义啊)

现在的问题是“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 个随机字符。然后在某个时候 它会得到正确的组合并停止。

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

我试过只给用户输入一个字母,它猜对了,所以它工作正常。

【问题讨论】:

  • 您的代码无法将多个随机字符组合成一个更大的密码;它只猜测单个字母。

标签: python python-3.x pycharm


【解决方案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)

【讨论】:

    【解决方案2】:

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

    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)
    

    【讨论】:

      【解决方案3】:

      从 Python 3.6 开始,您可以使用 random.choises 一次获取更多字符。

      我会推荐string-module 以获得更好的可读性。

      在终端里填满成千上万的错误猜测非常烦人,所以我稍微更改了代码。

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

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 2019-10-26
        • 2013-08-02
        • 1970-01-01
        • 2023-04-03
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        相关资源
        最近更新 更多