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;在这种情况下)。随机字符串生成工作正常,但我的循环似乎无限运行,而不是在达到条件后停止。任何人都可以帮我正确地阻止无限循环吗?
答案 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