python - python中Random模块如何生成一个新数字

标签 python python-3.x

所以我一直在研究线性同余生成器,但我坚持这样一个想法:一旦脚本运行,它总是以相同的方式生成。如果我运行这样的脚本;

import random

print(random.randrange(0,9))

每次运行脚本时都会生成一个新的随机数。我想知道它是如何做到这一点的。

这就是我到目前为止所得到的;

from collections import Counter

class linearCongruentialGenerator(object):
    def __init__(self, lowBound, highBound, length):
        self.lowBound, self.highBound, self.length = lowBound, highBound, length
        self.modulus = 20226231145#modulus
        self.multiplier = 104743412357321567#multiplier
        self.increment = 1049592131123467#increment
        self.seed = 43123211114#seed

    def __iter__(self):
        while self.length > 0:
            self.length -= 1
            self.seed = (self.multiplier*self.seed + self.increment) % self.modulus
            yield (self.seed % self.highBound)

    def linearCongruentialGenerator(self, first, last):
        self.seed = (self.multiplier*self.seed + self.increment) % self.modulus
        return self.seed

    def binary(self):
        self.seed = (self.multiplier*self.seed + self.increment) % self.modulus
        self.seedLength = len(str(seed))
        return (self.seed // 10**1 % 10) % 2

if __name__ == "__main__":
    random = linearCongruentialGenerator(0, 9, 100)
    random1 = linearCongruentialGenerator(0, 9, 100)
    list1 = []
    list2 = []
    for i in random:
        list1.append(i)
    for j in random1:
        list2.append(j)
    print(Counter(list1))
    print(len(set(list1)))
    print(Counter(list2))
    print(len(set(list2)))

此脚本计算由 LinearCongruentialGenerator 类生成的数字,然后打印分布:number:count。

我希望每次运行脚本时脚本都能生成新值。不使用python自带的random类。因为那是作弊:D

不知道如何解决这个问题,有什么建议吗?

最佳答案

只要按照我们的方法确保这个问题不会随机发生,在 init 中将种子设置为 time.time() ,这样它总是以当前时间种子=time.time()

关于python - python中Random模块如何生成一个新数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687199/

相关文章:

python - 如何通过遍历 python 嵌套字典来创建 html 表

python - 如何加入嵌套 Python 字典的值?

python - 如何删除或销毁 tkinter 中的标签?

python - 如何使用正则表达式分隔符来处理特殊情况?

python - 如何在 python 中创建具有多个列表/数组的数据框

python - 你能重载 Python 3.6 f-string 的 "operator"吗?

Python请求循环,如果状态码不是200重试

python - 模型对象没有属性保存

python - 在 Python 中计算 e

python - AWS Lambda 导入模块失败