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

2024-06-12 02:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想生成一个随机字符串并检查该字符串是否等于静态字符串,然后我希望程序继续运行,直到随机生成的字符串等于静态字符串(在本例中为“七”)。随机字符串生成工作得很好,但我的循环似乎无限运行,而不是在达到条件后停止。有人能帮我正确地停止无限循环吗?在


Tags: 字符串inforreturndefcount静态random
3条回答

27**5
Out[77]: 14348907

monkey的可能排列。我想你只是等的时间不够长。在

但是,您有一个bug,它将导致count永远无法打印:

^{pr2}$

在检查while块之前,while条件将脱离循环。将其更改为while True:,并允许中断条件中断。在

此外,优化:

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

''.join对列表的理解比join生成表达式的速度快。在

因此,重新检查所有代码(附带一些小的语法升级和计时器):

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

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

您的monkey()方法可以创建27^5==14348907(1400万)个不同的字符串。在随机创建特定的字符串seven之前(统计上)需要相当长的时间。再等等。在

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()长度结果(仅用于测试)。通过这个较小的示例,您可以看到程序按预期工作:

^{pr2}$

相关问题 更多 >