Random liefert Zufallszahlen auch ohne seed ?!?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mintpc
User
Beiträge: 50
Registriert: Montag 23. Januar 2012, 12:44

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
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.
mintpc
User
Beiträge: 50
Registriert: Montag 23. Januar 2012, 12:44

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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).
Das Leben ist wie ein Tennisball.
mintpc
User
Beiträge: 50
Registriert: Montag 23. Januar 2012, 12:44

Ah ja! Nochmal danke!
Jetzt hab ich's tatsächlich verstanden.

mintpc
Antworten