2010-04-20 13 views
4

我使用Python 2.6,我試圖運行一個簡單的隨機數生成程序(random.py):爲什麼我得到一個TypeError:當試圖導入隨機模塊時,'module'對象不可調用?

import random 

for i in range(5): 

    # random float: 0.0 <= number < 1.0 
    print random.random(), 

    # random float: 10 <= number < 20 
    print random.uniform(10, 20), 

    # random integer: 100 <= number <= 1000 
    print random.randint(100, 1000), 

    # random integer: even numbers in 100 <= number < 1000 
    print random.randrange(100, 1000, 2) 

現在我收到以下錯誤:

C:\Users\Developer\Documents\PythonDemo>python random.py 
Traceback (most recent call last): 
    File "random.py", line 3, in <module> 
    import random 
    File "C:\Users\Developer\Documents\PythonDemo\random.py", line 8, in <module> 
    print random.random(), 
TypeError: 'module' object is not callable 

C:\Users\Developer\Documents\PythonDemo> 

我已經看着Python文檔,這個版本的Python支持隨機。還有什麼我失蹤?

回答

15

爲您的文件命名別的東西。在Python中,腳本模塊,其名稱由文件名決定。所以當你開始你的文件random.pyimport random你正在模塊結構中創建一個循環。

2

編輯:看起來你有相同的名稱與內置的隨機模塊,所以你應該更改文件名以別的東西作爲其他建議

但在這之後,你仍然需要改變你的代碼發起隨機類

rand=random.Random() 

rand.uniform(10, 20) 

,也爲別人,因爲你調用模塊本身,而不是Random類

>>> for i in range(5): 
...  # random float: 0.0 <= number < 1.0 
...  print rand.random(), 
... 
...  # random float: 10 <= number < 20 
...  print rand.uniform(10, 20), 
... 
...  # random integer: 100 <= number <= 1000 
...  print rand.randint(100, 1000), 
... 
...  # random integer: even numbers in 100 <= number < 1000 
...  print rand.randrange(100, 1000, 2) 
... 
0.024357795662 12.3296648076 886 478 
0.698607283236 16.7373296747 245 638 
0.69796131038 14.739388574 888 482 
0.543171786714 11.3463795339 106 744 
0.752849564435 19.4115177118 998 780 
>>> 
+2

不,不需要實例化Random。隨機模塊直接提供適當的頂層函數,所以原始代碼應該可以正常工作。 (引擎蓋下,這些函數*實際上是Random實例的方法,但是。) – 2010-04-20 08:03:31

+0

Mark,感謝您的提示,您是對的。 – YOU 2010-04-20 09:19:23

5

將您的示例程序文件重命名爲myrandom.py或其他東西。我會打賭你是混淆進口。

+0

是的。它作爲random.py失敗,重新命名時工作正常。 – Joel 2010-04-20 03:11:48

1

由於腳本名爲random.py,因此您正在導入自身,然後嘗試將自己調用爲方法。將你的腳本重命名爲其他東西(如test.py),它會起作用。

相關問題