这个小脚本在0和1之间生成一个随机浮动,然后如果它小于“0.000111111111111”,它将打印消息“找到它”
import random
value = 0.4 / 3600
print value
while True:
rand = random.random()
print "RAND IS: " + str(rand) + "----- VAL IS " + str(value)
if rand < value:
print "found it"
所以看起来脚本运行并且它实际上从未“找到它”,但是当我在if语句之前注释掉print语句时,即使rand值不小于值,命令行仍然填充“找到它” 。怎么了?
答案 0 :(得分:3)
您的while循环旨在永远运行,因为task
始终为True
。你永远不会打破那无限循环。即使它找到了值,它也只是打印它,因为你给while循环的条件仍然是True。由于您无法更改条件,因此需要添加break语句:
True
答案 1 :(得分:2)
您的程序确实会找到小于和大于&#39;值&#39;的数字,无论它是否打印出所有数字。只是输出双向让你感到困惑。这是因为:(a)你的计算机比你想象的更快,只要它不打印任何东西; (b)但当 必须打印某些内容时,它会减慢到可以实际看到打印输出的程度; (c)成功&#34;发现之间的迭代次数&#34;比你想象的要大。
为了演示以上所有内容,我写了这个脚本:
Sheet.Range()
这会产生随机数,直到找到一个小于&#34;值&#34;,然后它会写出循环迭代次数和经过的CPU时间来找到它。它做了十万次。在我的计算机上,这个旧的但 旧的,这个程序花了六秒来运行。
然后我绘制了两者的直方图。首先,让我们看一下循环次数:
你可以看到,虽然通常只需要几千次迭代就能找到一个小于0.4 / 3600的随机数,但它可以多达80,000次迭代!这就是为什么它可能在你看来&#34;发现它&#34;从未被打印过。
现在让我们看一下经过的时间:
它看起来非常类似于循环次数的直方图,但请注意X轴刻度。该时间为毫秒。即使需要80,000次迭代才能找到小于0.4 / 3600的下一个数字,它只需要计算机 4毫秒来完成这一壮举!这就是为什么在你看来&#34;发现它&#34;当您注释掉每次打印输出时连续打印。