我很清楚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)
,它将给出一个索引错误。我该如何改进/更改它,使它能够处理任意两个数字?在
这使用的逻辑与您的几乎完全相同,但不会超出范围。我明白这只是为了学习,但我觉得有必要说我不会用这个来代替
random
。无论如何,此代码不会崩溃:NB:
虽然这不会崩溃,但它不会给出伪随机数,也就是说,如果你输入
randomNum(1,10)
,你将无法生成2、3或5。在你需要一个函数,比如}的差值,即
randombits()
,它在某个范围内生成一个随机整数(即256或2^32)。那么random()
函数需要首先取x
和{random(x, y)
的可能输出数。然后它需要计算调用randombits()
的次数,以获得足够的熵。然后它需要将randombits()
的多个调用的值合并为一个长整数。 一种方法是将randombits()
的输出放入长随机整数的一个单独数字中,也就是说,如果调用的输出是8, 9, 1
,那么长随机整数将是891。在然后它需要将长随机整数缩小到可能输出的数量(x和y之间的差)。
random.random()
使用的一种方法是继续获取一个长的随机整数,直到它在范围内。然后它需要将长随机整数添加到x
中,并将其返回。在代码:
不过,我做了一些“硬代码”,它总是十进制的,所以我可以像JavaScript一样使用它数学随机我发现你会更喜欢这个的。我相信你知道如何使用它,但这里有一些例子,以防你不知道。在
^{pr2}$如你所见,它生成了一个介于1到10之间的数字,后跟50个零。使用随机随机范围我希望这样能帮你一点忙。在
相关问题 更多 >
编程相关推荐