gpt4 book ai didi

python - 如何在 python 中制作自定义 rand 函数

转载 作者:行者123 更新时间:2023-12-01 02:34:41 26 4
gpt4 key购买 nike

我想做一个随机数生成器

所以我做了很多研究并在下面编写了一个小代码

a=1
b=2
m=5000
x=3
lst=[]
for i in range(10):
x=(a*x+b)%m
lst.append(x)
print(lst)
if len(lst) != len(set(lst)):
print("it has duplicates but possibly random numbers")
else:
print("those were random numbers")

我从here得到的数学方程它给了我一些随机数,但只有当值很大时,如果我选择小值(假设 m=5,保持其余值相同),我可以看到正在形成重复的数字系列。

*问题*

我可以从here看到python 从操作系统获取它,但它不会生成它们那么这是在python中生成随机数的正确方法吗??

最佳答案

I am only covering non cryptographically secure pseudorandom number generator

PRNG 是一个返回明显随机(假随机)数字的函数,这些数字足以欺骗人类。 有一个模式,它只是一个硬模式(对我们来说)

例如:

下面的序列非常简单(我想说,如果它是由 PRNG 生成的,那么它是一个非常糟糕的 PRNG)

[0, 2, 4, 6, 8]

现在,我想说这个其他序列是由更好的 PRNG 生成的

[1, 5, 5, 2, 6, 0, 3]

因此,我们需要一个函数来生成具有硬模式(对于人类)的序列,并且每个数字都依赖于前一个数字。

一个好的方法可能是使用一堆逻辑和算术运算(例如异或、除法、或、减法、模数)

我编写了这个函数,完全按照我上面描述的方式进行,结果对我来说非常令人满意。

n = 0xDEADBEEF
#returns a pseudorandom number between 0-9
def random():
global n
n = (n * 63) % 0xC4CB7296
n = n ^ 0x1754FBF
n = (n*0xFF) % 4294967296
n = n ^ 0x222F42CB
n = n | 0x1234567890
n = ((n + 14351514) * 32) % 7777333
return n % 10

for i in range(6):
print(random())

#Outputs:
2
4
7
2
6
9

如果您不总是想要相同的结果,您可以使用种子:

def seed(s):
global n
n = s


seed(12345)

for i in range(6):
print(random())

#Outputs
9
1
5
8
5
9

关于python - 如何在 python 中制作自定义 rand 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com