2012-03-01 242 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是一个列表)。