用Python在特定时间间隔内生成随机数

1 投票
4 回答
10926 浏览
提问于 2025-04-17 13:28

我在发帖之前做了一些研究,但还是有点迷茫(我对编程不是很熟悉)。

我想用Python生成或计算一个随机数,时间间隔是特定的。我并不想要完整的代码,只想知道如何使用时间库,如果这是正确的选择的话。

伪代码:

让Python [电脑] 在3秒内计算一个随机数

------> 把计算出来的值存储起来 (这个我能处理)

接下来,我会用这个随机生成的值来访问一个Python列表(这个列表也是通过随机数生成的,但我可以自己搞定)。

4 个回答

0

如果你想花3秒钟来获取一个随机数字,因为你在乎这个随机数字的质量,你可以使用os.urandom()来生成这个值。 但如果你只是想从你的列表中随机选择一个项目,那你可以用random.choice()。

1

首先,你没有说明你想生成什么类型的随机数,但考虑到你的例子是10,我假设你想生成一个范围内的整数——比如你在调用random.randrange(30)

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

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

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

这里的关键是,要每秒做一次某件事(在同步程序中——不要在图形界面或服务器中这样做!),你只需调用time.sleep

如果你正在进行的操作耗时超过了一秒(或者更长),那么这样做就不合适了。相反,你需要计算开始时间,然后睡眠直到那之后的一秒:

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

注意,我在这里使用了time.monotonic。这个函数专门为这种情况设计。它提供尽可能高的精度,同时效率也不错(特别是,与time.time不同,它在某些平台上不会只给你1秒的精度),并且保证即使在程序运行中更改系统时钟也不会出现时间倒退的情况。如果你使用的是3.2或更早的版本,可以查看文档寻找最佳替代方案(可能使用time.clock()),或者考虑使用ctypes调用相应的平台本地函数。

但在这种情况下,random.randrange的执行时间大约在微秒级别,这比大多数系统简单计时器的最小分辨率要短得多,所以没有必要这样做。

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核心一直忙碌地运行,这样非常浪费资源,但我觉得这正是你想要的,对吧?

编辑:根据abarnert的建议,我更新了代码,使用了time.clock,而不是time.time,因为这样在不同平台上效果更好,而且在程序运行时如果系统时间被修改也不会出现问题。

撰写回答