生成随机字符串并检查是否等于静态字符串[Python]

时间:2014-01-24 21:57:53

标签: python string random

characters ='abcdefghijklmnopqrstuvwxyz '

def monkey():
    return ''.join(random.choice(characters) for i in range(5))

def checkif():
     checkstring = "seven"
     randString = monkey()
     count = 1

     while(randString != checkstring):
           if(randString) == (checkstring):
              print(count)
              return True
           else:
              randString = monkey()
              count = count + 1

我想生成一个随机字符串并检查字符串是否等于静态字符串,然后我希望程序继续运行,直到随机生成的字符串等于静态字符串(" seven& #34;在这种情况下)。随机字符串生成工作正常,但我的循环似乎无限运行,而不是在达到条件后停止。任何人都可以帮我正确地阻止无限循环吗?

3 个答案:

答案 0 :(得分:1)

27**5
Out[77]: 14348907

monkey的可能排列。我想你只是没等多久。

但是,你有一个错误导致count永远不会被打印出来:

while(randString != checkstring):
           if(randString) == (checkstring):
              print(count)
              return True
           else:
              randString = monkey()
              count = count + 1

在检查while块之前,您的if条件将跳出循环。将其更改为while True:,让您的休息条件突然出现。

另外,优化:

def monkey():
    return ''.join([random.choice(characters) for i in range(5)])

''.join列表推导比join生成器表达式更快。<​​/ p>

所以,重新访问所有代码(抛出一些小的语法升级和一个计时器):

def monkey():
    return ''.join([random.choice(characters) for i in range(5)])

def checkif():
     checkstring = "seven"
     randString = monkey()
     count = 1
     start = time.time()

     while True:
           if randString == checkstring:
              print('found it in {} seconds; took {} iterations'.format(time.time() - start, count))
              return
           else:
              randString = monkey()
              count = count + 1

输出:

found it in 62.897234201431274 seconds; took 12298282 iterations

显然,你找到猴子的里程可能会有所不同: - )

答案 1 :(得分:0)

您的monkey()方法可以创建27 ^ 5 == 14348907(1400万)个不同的字符串。它(统计上)将花费相当长的时间,直到随机创建特定字符串seven。等等。

答案 2 :(得分:0)

27*27*27*27*27 = 14348907种可能性。获取字符串等于所需的字符串需要很长时间。

您可以尝试使用较小长度的测试:

def checkif():
     checkstring = "se" # length:2
     randString = monkey()
     count = 1

     while True: # Infinite loop
           if(randString) == (checkstring): # This will take care of loop exit
              print(count)
              return True
           else:
              randString = monkey()
              count = count + 1

并更改monkey()长度结果(仅用于测试)。通过这个较小的示例,您可以看到程序按预期工作:

def monkey():
    return ''.join(random.choice(characters) for i in range(2)) # length: 2