gpt4 book ai didi

python - python 中自制随机数生成器的问题。 (使用时间.时间())

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:48 26 4
gpt4 key购买 nike

我很清楚 python 有一个内置的随机库,所以请不要在其中包含任何对它的引用。我正在使用 time.time() 采取自己动手的方法。我制作了一个简单的随机数生成器,如下所示:

def random(x, y):
import time
choices = [i for i in range(x, y)]
t = time.time()
num = int(str(t-int(t))[2:])%100
xnum = [i for i in range(num, choices[-1])]
ynum = [choices[i] for i in xnum]
znum = ynum[choices[num-1]]
ret = choices[znum]
return ret

这对于像 random(1, 200) 这样的东西非常有效;但是,它有一些问题。例如,如果我要执行 random(10, 200),它会给出索引错误。我如何改进/更改它以使其处理任意两个数字?

最佳答案

您需要有一个函数,例如 randombits(),它生成某个范围内的随机整数(即 256 或 2^32)。然后你的 random() 函数需要先取 xy 的差,即 random( x, y)。然后它需要计算必须调用多少次 randombits() 才能获得足够的熵。然后它需要将 randombits() 的多次调用的值组合成一个长整数。一种方法是将 randombits() 的输出放入长随机整数的单独数字中,即如果调用的输出是 8, 9, 1则长随机整数将为 891。

然后它需要将长随机整数按比例缩小到可能输出的数量(x 和 y 之间的差值)。 random.random() 使用的一种方法是不断获取一个长随机整数,直到它在范围内。然后它需要将长随机整数添加到 x 并且应该返回它。

代码:

RANDOMBITS_RANGE = 256

def randombits():

return 4 # Replace this code with something that generates real random numbers

def random(x,y):
num_range = y-x
num_of_calls = num_range//RANDOMBITS_RANGE
random_integer = num_range + 1 #So that the first time the while loop block will execute
while random_integer >= num_range: #Keeps looping until random_integer < num_range
random_integer = sum(randombits()*RANDOMBITS_RANGE**x for x in range(num_of_calls))
return random_integer

关于python - python 中自制随机数生成器的问题。 (使用时间.时间()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089720/

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