Seite 1 von 1

Problem mit random

Verfasst: Mittwoch 10. März 2010, 18:16
von Wolfgang.Belau
Habe ein Problem mit random bei der Verwendung von pylab:

Code: Alles auswählen

import random
# importing pylab causes error, running python v2.5.2 or v2.6.4...
#from pylab import *
#
random.seed()
print "a random number below 11:", random.randint(0,11)

Verfasst: Mittwoch 10. März 2010, 18:39
von jbs
Na und was passiert beim Fehler?

Verfasst: Mittwoch 10. März 2010, 19:02
von BlackJack
@Wolfgang.Belau: `pylab` enthält den Namen `random`:

Code: Alles auswählen

In [47]: pylab.random
Out[47]: <built-in method random_sample of mtrand.RandomState object at 0xb7d3b380>
Schönes Beispiel warum *-Importe problematisch sind.

Fehlermeldung

Verfasst: Donnerstag 11. März 2010, 09:55
von Wolfgang.Belau
ok, hier die Meldung:

Code: Alles auswählen

File "C:\Documents and Settings\...\test_random.py", line 5, in <module>
    random.seed()
AttributeError: 'builtin_function_or_method' object has no attribute 'seed'

Verfasst: Donnerstag 11. März 2010, 10:15
von cofi
Wenn du das Problem immernoch hast, solltest du ganz drigendend BlackJacks Post lesen.

Verfasst: Donnerstag 11. März 2010, 10:16
von Rebecca
Ähm, laut Fehlermeldung versuchts du seed aufzurufen, laut obigem Codeschnipsel randint... :roll:

Aber wie BlackJack sagte, ist dein random anscheinend die Funktion aus pylab, nicht das Modul aus der stdlib.

Verfasst: Donnerstag 11. März 2010, 10:39
von Wolfgang.Belau
Wie kann die random Funktion aus dem python Modul random korrekt referenziert werden, um sie von der pylab Version zu unterscheiden?

random.random.seed() löst das Problem nicht.

Verfasst: Donnerstag 11. März 2010, 10:46
von CM
Nochmal: Der Import von pylab

Code: Alles auswählen

from pylab import *
importiert ebenfalls "random" und überschreibt damit das build-in random-Modul. Einfach den Sternchenimport vermeiden und nur das von pylab/Matplotlib importieren, was Du tatsächlich benötigst. Oder

Code: Alles auswählen

import pylab
ausführen und z. B. statt

Code: Alles auswählen

plot([1,2,3])
dies:

Code: Alles auswählen

pylab.plot([1,2,3])
Mehr zum Thema Module gibt es im Tutorial.

HTH
Christian

Verfasst: Donnerstag 11. März 2010, 10:57
von Wolfgang.Belau
Danke für den Hinweis!

Verfasst: Donnerstag 11. März 2010, 11:17
von ...
Laut obigem Codeschnipsel sollte pylab aber keine Probleme gemacht haben.

Es scheint doch auskommentiert zu sein.

Verfasst: Donnerstag 11. März 2010, 11:25
von cofi
Das solltest du vielleicht nochmal lesen:

Code: Alles auswählen

# importing pylab causes error, running python v2.5.2 or v2.6.4...
#from pylab import *
Das Problem tritt naemlich erst dann auf, wenn man den Kommentar entfernt, was der Kommentar drueber ja auch sagt.