随机模块如何在Python中生成新数字

2024-09-29 18:38:29 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我一直在玩线性同余生成器,但我的想法是,一旦脚本已经运行,它总是以相同的方式生成。如果我运行这样的脚本

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类生成的数字,然后打印分布:数字:计数。你知道吗

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

不知道该怎么做,有什么建议吗?你知道吗


Tags: self脚本defcounterrandomlengthseedprint
1条回答
网友
1楼 · 发布于 2024-09-29 18:38:29

只要做我们所做的,以确保这个问题不会随机发生,设置种子为时间。时间()在init中,因此它总是使用当前时间种子进行种子设定=时间。时间()

相关问题 更多 >

    热门问题