1

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

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

伪代码:

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

------> 将计算的生成存储在一个值中(我可以处理这个)

然后,我将使用随机生成的值来链接访问 python 列表(这也将通过随机数生成自动生成,但我可以弄清楚)。

4

4 回答 4

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 再次建议的那样(谢谢),因为这似乎可以提供更好的跨平台分辨率,并且在系统时间在中间更改时不会出现问题程序运行。

于 2013-01-24T00:00:51.257 回答
1

首先,您没有说要生成什么样的随机数,但鉴于您的示例是10,我假设它是某个范围内的整数 - 假设您正在调用random.randrange(30).

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

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

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

这里的关键是,每秒执行一次(在同步程序中——不要在 GUI 或服务器中这样做!)——你只需调用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()),或查看 usingctypes以调用适当的平台本机函数。

但在这种情况下,random.randrange将需要大约一微秒的时间,这比大多数系统的简单计时器的最小分辨率要少得多,因此没有理由做这样的事情。

于 2013-01-24T00:01:15.123 回答
0

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

于 2013-01-24T14:49:05.487 回答
0

注意:函数 time.clock() 已被删除,自 Python 3.3 起已被弃用:根据您的要求使用 time.perf_counter() 或 time.process_time() 来获得明确定义的行为。(由 Matthias Bussonnier 在 bpo-36895 中贡献。)

于 2022-02-08T15:13:27.780 回答