python random seed 不同_Python random.seed表现得很奇怪

这篇博客探讨了Python中的random模块和seed函数的使用。作者通过示例展示了如何设置随机数种子,并观察了多次调用random.randint(0,99)后的结果,特别是当seed值设为234时,随机数的重复性和不稳定性。文章还涉及了os.urandom和SystemRandom类在生成随机数时的不同行为。
摘要由CSDN通过智能技术生成

我调用random.seed(234),然后调用random.randint(0,99)并收到92.当我再次重复此过程几次时,我收到86.当我第二次调用random.randint然后它返回92.我期待第一个值是86而不是92.为什么它是92?

完整的日志输出如下.我已经包含了所有内容,因为之前有一些行动可以解释看似错误的行为:

In [1]: import random

In [2]: import string

In [3]: string.letters

Out[3]: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

In [4]: string.ascii_letters

Out[4]: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

In [5]: string.printable

Out[5]: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

In [6]: len(string.printable)

Out[6]: 100

In [7]: [string.printable[random.randint(0,99)] for i in range(20)]

Out[7]:

['{',

'+',

'[',

'\r',

'R',

'Z',

'v',

'|',

'v',

'e',

'T',

'x',

'\\',

'}',

'0',

'>',

'V',

'\n',

'`',

'`']

In [8]: ''.join([string.printable[random.randint(0,99)] for i in range(20)])

Out[8]: '%Z\\%mx4Z53uUZIa5KHe*'

In [9]: ''.join([string.printable[random.randint(0,99)] for i in range(20)])

Out[9]: 'Fg\nDHW+oV?-9``}\x0by%xD'

In [10]: import os

In [11]: os.urandom(1)

Out[11]: '('

In [12]: os.urandom(1)

Out[12]: '8'

In [13]: os.urandom(1)

Out[13]: '\xb1'

In [14]: os.urandom(1)

Out[14]: ')'

In [15]: os.urandom(1)

Out[15]: '\x8c'

In [16]: os.urandom(1)

Out[16]: '^'

In [17]: os.urandom(1)

Out[17]: '{'

In [18]: os.urandom(1)

Out[18]: '\x8f'

In [19]: ''.join(os.urandom(10))

Out[19]: '{t\x8dR\x1d\x83\xef\xd6N\xbd'

In [20]: ''.join(os.urandom(10))

Out[20]: '\x96\\\xf6\xe3\xf4/\x1f\xc7\x90\x02'

In [21]: from random import SystemRandom

In [22]: crypt = SystemRandom()

In [23]: ''.join([string.printable[crypt.randrange(100)] for i in range(20)])

Out[23]: "WoDVH\r1!?1+djB'f

In [24]: ''.join([string.printable[crypt.randrange(100)] for i in range(20)])

Out[24]: '\rf?zo`7^{Y_Zx^[SYw7c'

In [25]: ''.join([string.printable[crypt.randrange(100)] for i in range(20)])

Out[25]: "3k*uGVIP'~^{P*~bserk"

In [26]: ''.join([string.printable[crypt.randrange(100)] for i in range(20)])

Out[26]: '~lkM/a_F&D\n

In [27]: random.seed(234)

In [28]: random.randint(0,99)

Out[28]: 92

In [29]: random.seed(234)

In [30]: random.randint(0,99)

Out[30]: 86

In [31]: random.seed(234)

In [32]: random.randint(0,99)

Out[32]: 86

In [33]: random.seed(234)

In [34]: random.randint(0,99)

Out[34]: 86

In [35]: random.randint(0,99)

Out[35]: 92

In [36]: random.randint(0,99)

Out[36]: 48

In [37]: random.seed(234)

In [38]: random.randint(0,99)

Out[38]: 86

In [39]: import sys

In [40]: sys.version_info

Out[40]: sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0)

In [41]: sys.version

Out[41]: '2.7.13 (default, Dec 17 2016, 23:03:43) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'

**编辑,很奇怪:“相同”看似错误的行为重复**

在同一个终端窗口中,我关闭了之前的ipython会话.我做了一些命令行活动,然后我又打开了ipython.我做了一些不同的工作.然后我再试一次:

In [37]: import random

In [38]: random.seed(234)

In [39]: random.randint(0, 99)

Out[39]: 85

In [40]: random.randint(0, 99)

Out[40]: 50

In [41]: random.seed(234)

In [42]: random.randint(0, 99)

Out[42]: 86

In [43]: random.randint(0, 99)

Out[43]: 92

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值