[Python-ideas] Python's Source of Randomness and the random.py module Redux
Nathaniel Smith
njs at pobox.com
Fri Sep 11 11:52:41 CEST 2015
On Fri, Sep 11, 2015 at 1:02 AM, Paul Moore <p.f.moore at gmail.com> wrote:
> On 11 September 2015 at 05:44, Stephen J. Turnbull <stephen at xemacs.org> wrote:
>> I suppose it would be too magic to have the seed method substitute the
>> traditional PRNG for the default, while an implicitly seeded RNG
>> defaults to a crypto strong algorithm?
>
> One issue with that - often, programs simply use a RNG for their own
> purposes, but offer a means of getting the seed after the fact for
> reproducibility reasons (the "map seed" case, for example).
>
> Pseudo-code:
>
> if <user supplied a "seed">:
> state = <user-supplied value>
> random.setstate(state)
> else:
> state = random.getstate()
> ... do the program's main job, never calling seed/setstate
> if <user requests the "seed">:
> print state
>
> So getstate (and setstate) would also need to switch to a PRNG.
>
> There's actually very few cases I can think of where I'd need seed()
> (as opposed to setstate()). Maybe if I let the user *choose* a seed
> Some games do this.
You don't really want to use the full 4992 byte state for a "map seed"
application anyway (type 'random.getstate()' in a REPL and watch your
terminal scroll down multiple pages...). No game actually uses map
seeds that look anything like that. I'm 99% sure that real
applications in this category are actually using logic like:
if <user supplied a "seed">:
seed = user_seed()
else:
# use some RNG that was seeded with real entropy
seed = random_short_printable_string()
r = random.Random(seed)
# now use 'r' to generate the map
-n
--
Nathaniel J. Smith -- http://vorpus.org
More information about the Python-ideas
mailing list