2017-07-02 51 views
0

我想定義500個變量。所有這些都應該是一個由binomal分佈產生的隨機數。然後我想在HTML頁面中顯示它們中的每一個。定義列表中的元素的許多變量

我的如下代碼:

# draw a number from the distribution 
def a1s1(self): 
    return 3 * np.random.binomial(1, 0.3) 

# get rid of the decimal point 
def a1s1int(self): 
    return int(self.a1s1()) 

# define 500 variables 
number1 = models.FloatField() 
number2 = models.FloatField() 
....# this should continue in this way until "number500" 

# generate a list of 500 random numbers 
def drawnumbers(self): 
    rnlist = [] 
    numbers = dict() 
    for i in range(1, 500): 
     numbers[i] = self.a1s1int() 
     rnlist.append(numbers) 
    return numbers 

# to get each element from the list 
number1 = self.drawnumbers[1] 
number2 = self.drawnumbers[2] 

這給我的錯誤:

NameError: name 'self' is not defined 

有時我得到另一個錯誤 「NoneType」 是不可調用的。

你能幫忙嗎?我對Python真的很陌生。非常感謝。

+4

看起來你是新來的Python。不要直接跳到像numpy這樣的模塊,可以考慮下面的基礎教程,例如變量,條件和循環結構,數據結構如列表和字典,函數和OOP。 –

+4

首先,代碼的最後兩行變量'self'從未被定義。你必須在某個地方定義它。同樣的道理,你認爲你可以調用一個函數,但是你沒有。其次,不要使用名稱'self',因爲它被用作類方法中對象的引用。第三,爲什麼你要500個名稱變量而不是500個元素名單? – DyZ

+0

我想在html頁面上點擊按鈕時顯示每個元素。點擊一次,顯示一個。再次點擊,顯示第二個。我實際上認爲500列名單就足夠了。我只是不知道如何將列表中的元素傳遞給html頁面 – Feibai

回答

0

最好是直接生成列表:

number=[int(3*np.random.binomial(1,0.3)) for i in range(500)] 

您可以通過number[23]爲爲例訪問它們。

+0

我試過了你的代碼。有用。但我仍然遇到問題[23]。因爲如果我以你的方式建立列表,其中一個參數(數字3)由另一個函數創建。所以它會是這樣的:'number = [int(self.p()* np.random.binomial(1,0.3))for i in range(500)]'。 p()在類a中定義。 Python給出了「自我未定義」的錯誤。如果我把「自己」拿出來,它給出了錯誤,「p()缺少1個需要的位置參數:'self'」。如果我在範圍(500)]中寫入'def number(self):return [int(self.p()* np.random.binomial(1,0.3))'',那麼我不能訪問number [23] 。 – Feibai