使用随机模块避免重复值

下面是一个“蛮力”词猜测......事情。我不是要向我的兄弟姐妹证明即使知道使用蛮力的字符数也需要多长时间才能找到密码。在让它运行了几个小时但没有成功之后,我认为他明白了。现在我想在它背后放一些逻辑,而对于我的生活,我无法弄清楚。我在网上找到了类似于我想要的东西,但我不知道如何使它适应我的代码。


import string

import random


def make_random():

   return''.join([random.choice(string.ascii_uppercase) for n in xrange(3)])


while True:

   random2=make_random()

   if random2 != "AAA":

      print(random2)

   if random2 == "AAA":

      print("AAA")

      print("Found")

      break

我想我需要一个变量来跟踪所有猜测的选择,并将其与新字符串进行比较并设置它们,以便它们不能相等,但老实说我不知道。


任何帮助都是很好的帮助。


潇湘沐
浏览 139回答 2
2回答

炎炎设计

如果有人要系统地尝试所有不同的密码,那么他需要迭代所有可能的组合,而不是尝试两次相同的组合。这是在 Python 中执行此操作的一种方法:import itertoolsimport stringreal_pass = 'AAC'def find_num_iterations_to_guess_password(pass_length):    all_letters = string.ascii_uppercase    iterations = 0    for i in itertools.product(all_letters, repeat=pass_length):        guess = ''.join(i)        if guess == real_pass:            print(f'the real password is {guess} and was guessed after {iterations}')            break        iterations += 1find_num_iterations_to_guess_password(len(real_pass))

翻过高山走不出你

比随机生成猜测并与已使用的选项列表进行比较更好的选择是通过算法创建所有可能的 n 长度产品并迭代它们:from itertools import productimport stringfor i in product(string.ascii_uppercase, repeat=3):    if ''.join(i) == 'AAA':        print("Found")        break编辑:使用product,不permutation
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python