Ich rief random.seed (234), dann random.randint (0, 99) und erhielt 92. Wenn ich diesen Prozess mehrmals wiederholt habe ich 86. Wenn ich random.randint aufgerufen ein zweites Mal, dann 92. Ich habe erwartet, dass der erste Wert 86 und nicht 92 ist. Warum war es 92?Python random.seed verhielt sich seltsam
Die vollständige Protokollausgabe ist unten. Ich habe alle davon enthalten einhüllen dort einige vorherige Aktion war, das scheinbar fehlerhaftes Verhalten erklären kann:
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]: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~ \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<;nW"
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<sC&i\r\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)]'
** bearbeiten, seltsam: „same“ scheinbar fehlerhaftes Verhalten ** Im gleichen Endgerät wiederholt Fenster Ich habe die vorherige ipython-Sitzung geschlossen. Ich habe einige Befehlszeilenaktivitäten ausgeführt, dann habe ich Ipython erneut geöffnet. Ich habe eine andere Arbeit gemacht. Dann habe ich versucht, diese wieder:
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
Python 3.4 '>>> zufällig.Samen (234) >>> random.randint (0, 99) >>> random.seed (234) >>> random.randint (0, 99) >>> random.seed (234) >>> random.randint (0, 99) 43'. Kann nicht reproduzieren. –
getestet mit Python 2.7, unterschiedlicher Wert, aber immer gleich auch ... –
Ja, seltsam, huh. Danke @ Jean-FrançoisFabre, ich schätze, das ist ein Randfallfehler oder ein dokumentiertes, aber überraschendes Verhalten. – AJP