关于random模块的seed函数用法
random.seed(a=None, version=2)-- 初始化随机数生成器
参数 含义
a
1. 如果省略该参数或者将其值设置为 None(默认),将使用当前系统时间作为随机数种子(如果操作系统提供了随机性来源,则用它来代替系统时间)
2. 如果参数 a 为整数,则直接被用作随机数种子. 该参数的值也可以是字符串、字节、字节数组等
version
1. 如果 version=2(默认),字符串、字节或字节数组对象的每一个位都将比转换成整数使用
2. version=1,用于从旧版本的 python 中复制随机序列,字符串和字节算法生成更窄的种子范围
速查宝典的seed函数看不懂参数的含义,涉及知识盲区,有哪位大佬能用通俗的话帮忙解答一下吗 本帖最后由 Twilight6 于 2020-7-24 14:00 编辑
我们先了解下随机数种子是什么,看下面资料:
随机数就是就随机数种子中取出的数。种子就是个序号,这个序号交给一个数列管理器,通过这个序号,你从管理器中取出一个数列,这个数列就是你通过那个序号得到的随机数。
但这个随技术并不真正随机。因为它是通过某个算法的得到。也就是说你给数列管理器同一个序号将得到同样一个“随机”数列。
从甲鱼哥的速查宝典的标题就可以看出,random 是生成伪随机数,而不是真正意义上的随机
而 seed 就是设置下次随机的种子,也就是下次随机数的序号,而每个随机数在系统中都有自己的种子(序号),所以你使用 seed 可以使得下个随机数直接生成对应序号的随机数
所以当你 seed 的参数是不变的,也就会导致实际上是序号不变,也就会一直生成这个随机数,看下面的例子:
import random
random.seed(10)
print(random.random())
random.seed(10)
print(random.random())
random.seed(10)
print(random.randint(1,100))
random.seed(10)
print(random.randint(1,100))
输出结果:
0.5714025946899135
0.5714025946899135
74
74
而且不同的随机数数列管理器,种子序号自然也会不同,看下面的代码:
import random
random.seed(10)
print(random.randint(1,10))
random.seed(10)
print(random.randint(1,100))
输出结果:
10
74
如果你没有设定 random.seed() 函数或 random.seed() 函数参数为空时使用 random.random() 函数返回的结果将是随机的:
>>> random.random()
0.1456692551041303
>>> random.random()
0.45492700451402135
>>> random.random()
0.7707838056590222
>>> random.random()
0.705513226934028
当你使用了 random.seed() 函数并为 a 参数赋值时使用 random.random 函数时返回的结果将被固定在一个随机数上:
>>> random.seed(100)
>>> random.random()
0.1456692551041303
>>> random.seed(100)
>>> random.random()
0.1456692551041303 Twilight6 发表于 2020-7-24 13:56
我们先了解下随机数种子是什么,看下面资料:
你敢不敢不这么快 nahongyan1997 发表于 2020-7-24 14:16
如果你没有设定 random.seed() 函数或 random.seed() 函数参数为空时使用 random.random() 函数返回的结果 ...
seed函数内的1是不是相当于一个变量
获取随机值后,只要seed函数参数调用1就还是返回同样的随机值 Twilight6 发表于 2020-7-24 13:56
我们先了解下随机数种子是什么,看下面资料:
打个比方,是不是相当于1是一个字典类的储蓄器,如果用seed函数参数给1然后获取两个随机值0-10和0-100
然后下次调用randint 0-10 就输出原来的伪随机数,randint0-100就输出原来0-100的伪随机数 UncleMonster 发表于 2020-7-24 14:29
seed函数内的1是不是相当于一个变量
获取随机值后,只要seed函数参数调用1就还是返回同样的随机值
没错,就像在使用下标索引一个数组内的元素。 UncleMonster 发表于 2020-7-24 14:33
打个比方,是不是相当于1是一个字典类的储蓄器,如果用seed函数参数给1然后获取两个随机值0-10和0-100
...
是的,他是通过特殊的算法,来给你随机数序列里面排序,然后每一个都有对应的种子(序列号) Twilight6 发表于 2020-7-24 14:45
是的,他是通过特殊的算法,来给你随机数序列里面排序,然后每一个都有对应的种子(序列号)
以前玩易语言的时候里面就有一个 置随机数种子 和一个 取随机数 . Twilight6 发表于 2020-7-24 14:45
是的,他是通过特殊的算法,来给你随机数序列里面排序,然后每一个都有对应的种子(序列号)
感谢大佬,最佳能不能给两个{:10_266:}不然搞得有点尴尬
UncleMonster 发表于 2020-7-24 15:07
感谢大佬,最佳能不能给两个不然搞得有点尴尬
他都1600+了他不缺了,给我吧。{:10_254:} 哎呀,来迟了一步 nahongyan1997 发表于 2020-7-24 15:22
他都1600+了他不缺了,给我吧。
讲究先来后到吧{:10_266:}太为难了 UncleMonster 发表于 2020-7-24 15:25
讲究先来后到吧太为难了
没事我想到这个结果了{:10_277:}
页:
[1]