2008-09-16 3 views

Antwort

34

Sie wahrscheinlich eine Datei mit dem Namen random.py oder random.pyc in Ihrem Arbeitsverzeichnis haben. Das ist das Shadowing des eingebauten Zufallsmoduls. Sie müssen random.py in etwas wie my_random.py umbenennen und/oder die random.pyc-Datei entfernen.

sicher zu sagen, was los ist, dies tun:

>>> import random 
>>> print random.__file__ 

, dass Sie genau zeigen, welche Datei importiert wird.

+0

In der Python 3.3.2 Shell muss ich den 'print' weglassen, um den Dateipfad zu erhalten. – Tony

+1

@Tony in Python 3, 'print' ist eine Funktion. Sie könnten also 'print (random .__ file __)' schreiben. – Zenadix

2

Ich denke, Sie müssen einige weitere Informationen geben. Es ist nicht wirklich möglich zu beantworten, warum es nicht funktioniert, basierend auf den Informationen in der Frage. Die grundlegende Dokumentation für den Zufallsgenerator lautet: https://docs.python.org/library/random.html

Sie könnten dort nachsehen.

0

Können Sie ein Beispiel von dem, was Sie versuchen zu veröffentlichen? Es ist nicht klar aus Ihrer Frage, was das eigentliche Problem ist.

Hier ist ein Beispiel dafür, wie die Zufalls Modul zu verwenden:

import random 
print random.randint(0,10) 
1
Python 2.5.2 (r252:60911, Jun 16 2008, 18:27:58) 
[GCC 3.3.4 (pre 3.3.5 20040809)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import random 
>>> random.seed() 
>>> dir(random) 
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', 'WichmannHill', '_BuiltinMethodType', '_MethodType', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '_acos', '_ceil', '_cos', '_e', '_exp', '_hexlify', '_inst', '_log', '_pi', '_random', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'jumpahead', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'uniform', 'vonmisesvariate', 'weibullvariate'] 
>>> random.randint(0,3) 
3 
>>> random.randint(0,3) 
1 
>>> 
0

scheint gut für mich zu arbeiten. Schauen Sie sich die Methoden in der official python documentation für random:

>>> import random 
>>> random.random() 
0.69130806168332215 
>>> random.uniform(1, 10) 
8.8384170917436293 
>>> random.randint(1, 10) 
4 
0

Werke für mich:

Python 2.5.1 (r251:54863, Jun 15 2008, 18:24:51) 
[GCC 4.3.0 20080428 (Red Hat 4.3.0-8)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import random 
>>> brothers = ['larry', 'curly', 'moe'] 
>>> random.choice(brothers) 
'moe' 
>>> random.choice(brothers) 
'curly' 
1

Ist es möglich, dass das Skript, das Sie ausführen, random.py selbst heißt?

3

Dies passiert, weil Sie eine zufällige.py-Datei im Python-Suchpfad haben, höchstwahrscheinlich das aktuelle Verzeichnis.

Python sucht mit sys.path nach Modulen, die normalerweise das aktuelle Verzeichnis vor den Standard-Site-Paketen enthalten, das die erwartete random.py enthält.

Dies wird voraussichtlich in Python 3.0 behoben, so dass Sie keine Module aus dem aktuellen Verzeichnis importieren können, ohne eine spezielle Importsyntax zu verwenden.

Entfernen Sie einfach die random.py + random.pyc in dem Verzeichnis, in dem Sie Python ausführen, und es wird gut funktionieren.