使用Python在一定时间间隔内计算随机数

时间:2013-01-23 23:48:59

标签: python random python-3.x

我在发布之前做了一些研究,但似乎很丢失(在编码方面没有太多经验)。

我试图用Python生成或计算一段时间间隔的随机数。我不是在寻找完整的代码,如果要使用时间库我需要帮助。

伪码:

允许python [PC]计算一个随机数3秒  

------>将计算的代数存储在值(我可以处理)

然后我会使用随机生成的值来链接访问python列表(它也会通过随机数生成自动生成,但我可以想出来)。

3 个答案:

答案 0 :(得分:1)

我不确定你为什么要这样做,但是这里是如何计算许多随机数,将其中的大部分丢弃,然后在3秒后使用最后一个。

import random
import time

start = time.clock()
while time.clock() - start < 3:
    random_number = random.randint(0,100)

print random_number

这毫无意义地丢弃了我机器上大约200万个完美的随机数字。

(而且,正如abarnert指出的那样,这也会在繁忙的循环中占用整个3秒的一个CPU核心,这非常非常浪费,但我认为这是你要求的?)

编辑已更新为使用time.clock而不是time.time,正如abarnert再次建议的那样(感谢),因为这似乎可以跨平台提供更好的解决方案,而不是在程序运行过程中改变系统时间时会遇到问题。

答案 1 :(得分:1)

首先,你没有说出你想要生成什么样的随机数,但鉴于你的例子是10,我认为它是某个范围内的整数 - 假设你正在调用{{3 }}

现在,您想要每秒计算一个数字,持续3秒,然后保留最后一个。我不知道为什么你甚至想要这样做,但你可以这样做:

for i in range(3):
    number = random.randrange(30)
    time.sleep(1.0)

在3秒结束时,number将是生成的第三个随机数。

这里的关键是,每秒做一次(在同步程序中 - 不要在GUI或服务器中执行此操作!) - 您只需拨打random.randrange(30)

如果您正在进行的操作占用了大量的一秒钟(或更长时间),那么这是不合适的。相反,你想要计算开始时间,然后睡到一秒钟之后:

t0 = time.monotonic()
for i in range(3):
    number = random.randrange(30)
    t0 += 1
    time.sleep(t0 - time.monotonic())

请注意,我在这里使用了time.sleep。此功能专为此类用例而设计。它返回的精度与合理效率一样高(特别是,与time.time不同,它在某些平台上不会给你1s精度),并且它保证你永远不会倒退,即使,例如, ,您在程序中间更改系统时钟。如果您使用的是3.2或更早版本,请查看文档以获取最佳替代方案(可能使用time.clock()),或者使用ctypes调用相应的平台本机函数。

但是在这种情况下,random.randrange会占用一微秒左右的时间,这比大多数系统的简单定时器的最小分辨率要少得多,因此没有理由做这样的事情

答案 2 :(得分:0)

如果你想花3秒钟得到一个随机数,因为你担心随机数的质量,你可以使用os.urandom()来生成值。如果您真正想做的就是随机选择列表中的项目,可以使用random.choice()