Seite 1 von 1

Random liefert Zufallszahlen auch ohne seed ?!?

Verfasst: Sonntag 26. August 2012, 16:29
von mintpc
Hallo zusammen,

die Funktion

Code: Alles auswählen

random.randint(1,200)
sollte (dachte ich immer) mit

Code: Alles auswählen

random.seed()
initialisiert werden (Systemzeit als Startwert), sonst liefert
sie keine Zufallswerte.

Hier:

Code: Alles auswählen

import random
a = random.randint(1,200)
print(a)
bekomme ich jedoch bei jedem Ausführen auch andere Werte, ohne seed()
müssten es doch dann immer dieselben sein.

Wozu ist denn dann seed() überhaupt gut, bzw. wie kann ich zum Testen
meines Programms immer dieselben Zufallszahlen ausgeben lassen (wie es eigentlich
ohne seed() sein sollte.

Danke schonmal

mintpc

Re: Random liefert Zufallszahlen auch ohne seed ?!?

Verfasst: Sonntag 26. August 2012, 16:42
von BlackJack
@mintpc: Ich weiss nicht wo Du die Idee her hast, dass `random` ohne expliziten `seed()`-Aufruf immer die selbe Folge von Zufallszahlen liefert, aber das tut es wie Du ja festgestellt hat *nicht*. Python ist nicht C.

Wenn Du immer die selbe Folge haben möchtest, *dann* kannst Du mit `seed()` plus Argument dafür sorgen, denn für den gleichen Startwert sollte immer die gleiche Folge kommen. Das gilt aber nur für eine konkrete Implementierung und Version verbindlich. Bei CPython hat sich die Implementierung zum Beispiel mindestens einmal in der Vergangenheit geändert. Wenn die Tests wirklich reproduzierbar sein sollen, müsste man für den Test dafür sorgen, dass tatsächlich immer die gleichen Werte verwendet werden.

Re: Random liefert Zufallszahlen auch ohne seed ?!?

Verfasst: Sonntag 26. August 2012, 18:08
von mintpc
Ah, verstanden. Hab's ausprobiert.
Ich dachte, seed() entspräche dem randomize aus Delphi.
Wenn dem nicht so ist, kann ich ja seed () auch weglassen.

Danke für die schnelle Antwort :-)

mintpc

Re: Random liefert Zufallszahlen auch ohne seed ?!?

Verfasst: Sonntag 26. August 2012, 21:40
von EyDu
mintpc hat geschrieben:Ich dachte, seed() entspräche dem randomize aus Delphi.
Wenn dem nicht so ist, kann ich ja seed () auch weglassen.
Das seed entspricht auch dem randomize aus Delphi, es wird beim Importieren des Moduls aber immer automatisch aufgerufen. Du brauchst dich darum also nicht kümmern. Das steht aber auch so in der Doku.
random.seed hat geschrieben:Initialize the basic random number generator. Optional argument x can be any hashable object. If x is omitted or None, current system time is used; current system time is also used to initialize the generator when the module is first imported. If randomness sources are provided by the operating system, they are used instead of the system time (see the os.urandom() function for details on availability).

Re: Random liefert Zufallszahlen auch ohne seed ?!?

Verfasst: Montag 27. August 2012, 20:49
von mintpc
Ah ja! Nochmal danke!
Jetzt hab ich's tatsächlich verstanden.

mintpc