使用python生成随机数

Whi*_*ger 0 python random

我正在寻求创建随机数,因为由于某些情况我无法使用该random库。基本上,我希望能够使用纯python 复制random.randint()random.random()方法。

我不希望有人在python中转储整个代码(尽管那会很棒),但是有人可以向我介绍类似的C / C ++ / Java算法,该算法可以轻松地复制到python中吗?

编辑:我正在寻找有关如何使用python代码创建随机数的参考,而不是我自己不这样做并找到使用方式randomnumpy.random不惜一切代价的原因

Joh*_*024 6

由于您被迫在在线IDE上使用,因此我将假定这是课程的工作,并且您不需要最新,最好,最可靠的随机数生成器。取而代之的是,您只需要一些足以完成临时课程的内容。

在这种情况下,用于生成随机数的常见算法是线性同余生成器。典型参数:

>>> def r(seed=[0], m=2**32, a=1664525, c=1013904223):
...   seed[0] = (a*seed[0] + c) % m
...   return seed[0]
... 
Run Code Online (Sandbox Code Playgroud)

该算法返回假定为0到(2 ** 32)-1的随机整数。

以下是一些示例结果:

>>> r()
1013904223
>>> r()
1196435762
>>> r()
3519870697
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关此算法的更多信息。

除非更改种子,否则该算法将始终在定义函数后从同一点开始。

同样,这不是认真的工作,对于这些工作而言,结果的质量很重要。

模拟random.randomrandom.randint

要返回介于0和1之间的“随机”数字[0,1),请使用上述函数r

def random():
    return r() / 2**32
Run Code Online (Sandbox Code Playgroud)

同样适用于random.randint

def randint(a, b):
    return int(a + (1 + b - a) * r() / 2**32)
Run Code Online (Sandbox Code Playgroud)

如果min 的值r已更改,则也2**32应在此处更改。