每次循环运行时都有新字符串

时间:2018-11-28 20:28:37

标签: python string python-2.7 random brute-force

试图证明一个兄弟错误,即即使使用正确数量的字符,使用Brute Force计算机花多长时间才能猜测特定的字符串。我可以运行代码,但无法弄清楚使其在每次运行时打印一个新字符串。我确定我已经结束了简单的事情。以下是我尝试过的代码的几个示例。

import string
import random

random=''.join([random.choice(string.ascii_letters+string.digits) for n in xrange(5)])

while True:
   if random != "Steve":
      print(random)
   if random == "Steve":
      print("Found")

这将不断重复打印相同的字符串。我也尝试过在没有while的情况下仅使用if语句,但这似乎不起作用。

我很了解,一旦random选择了这5个随机字符,它就不会改变,除非有什么改变为止,但是就像我说的那样,我不确定该怎么做。我曾尝试将random移到其他地方,但没有用,只是得到了不同的错误消息。

有人可以帮我吗。

2 个答案:

答案 0 :(得分:4)

random=''.join([random.choice(string.ascii_letters+string.digits) for n in xrange(5)])

这不会每次都创建一个新的随机字符串。在这一点上,random只是一个随机生成的字符串,在while循环运行时不会改变。引用random不会创建新的字符串,而是只会获取您生成的第一个字符串,因为random只是内存中的字符串而不是函数。

将随机字符串创建移动到函数中

import string
from random import choice

def make_random():
    return ''.join([choice(string.ascii_letters+string.digits) for n in xrange(5)])

然后运行循环:

while True:
    random = make_random()

    if random != "Steve":
        print(random)
    if random == "Steve":
        print("Found")

编辑:

import random切换为from random import choice是因为random(变量)覆盖了random(库),并在您尝试调用random.choice时引发属性错误。

答案 1 :(得分:2)

您在这里有两个问题。正如@Primusa指出的那样,您的随机数应该在循环内移动,否则只会运行一次。但是,另一个问题是,您正在导入random,并且还将变量设置为random。这就是您的NameError的来源。您已将random定义为字符串,该字符串可在循环的第一次迭代中使用。但是,在第二次迭代中,random不会为此声明一个名为choice的函数,因为此时它是一个字符串。重命名random变量或在别名下导入random包,如下所示:

import random as rnd