2012-03-01 193 views
-1

我的第一個問題,對不起,如果我犯了一個錯誤或之前已經回答,我無法找到它。python for循環和變量

這裏是我的代碼的通用版本:

count = 0 
classlist = [] 
for i in xrange(0,100): 
    if random.random() < 0.5: 
     var_1 = 1 
    else: 
     var_1 = 2 
    count += 5 

    classlist.append(Class(var_1,count)) 

我的問題是,這個循環運行後,該類的每個實例都有計數(5 * 100 = 500在這個例子中)終值。

如何創建一個具有不同count值的類實例列表?

編輯:縮進是正確的。

+0

看起來像你需要編輯的代碼,或者你只是添加到列表 – macduff 2012-03-01 21:55:06

+0

您的縮進關閉。你需要在循環內追加。縮進'classlist.append'多一個級別 – 2012-03-01 21:55:15

回答

2

您至少需要在for循環中移動classlist.append(Class(var_1,count))

假設代碼是如下:

import random 

class Class(object): 
    """Trivial demo class""" 
    def __init__(self, var, count): 
     """Construct an instance""" 
     super(Class, self).__init__() 
     self.var = var 
     self.count = count 

    def __str__(self): 
     """Produce a string representation""" 
     return "(var = {0}, count = {1})".format(self.var, self.count) 

count = 0 
classlist = [] 
for i in xrange(0,10): 
    if random.random() < 0.5: 
     var_1 = 1 
    else: 
     var_1 = 2 
    count += 5 

    classlist.append(Class(var_1,count)) 

print "\n".join([str(x) for x in classlist]) 

產地:

(var = 2, count = 5) 
(var = 2, count = 10) 
(var = 1, count = 15) 
(var = 1, count = 20) 
(var = 2, count = 25) 
(var = 2, count = 30) 
(var = 2, count = 35) 
(var = 2, count = 40) 
(var = 2, count = 45) 
(var = 2, count = 50) 

它的工作原理。問題可能是您所存儲的字段是一個類(靜態)字段。 在你的類定義中,確保你沒有計算靜態。查看我的代碼以獲取示例。

+0

對不起,從一開始縮進應該是這樣的。 除了縮進,這應該工作,對吧? 我正在努力追查此... – therainingmonkey 2012-03-02 16:01:19

2

也許這就是你想要的?

count = 0 
classlist = [] 
for i in xrange(0,100): 
    if random.random() < 0.5: 
     var_1 = 1 
    else: 
     var_1 = 2 
    count += 5 
    classlist.append(Class(var_1,count)) 
0

我猜你的類初始化代碼設置類屬性,notinstance屬性:

class Class: # bad name 
    def __init__(self, v, c): 
     Class.v = v # should be self.v = v 
     Class.c = C# should be self.c = c 
+0

不,它設置self.x – therainingmonkey 2012-03-02 16:10:04

0

發現了它,我想我路過類計數的實例,而不是它的價值(在我的代碼,count是一個列表)。