2012-03-01 7 views
-1

私の最初の質問、申し訳ありませんが、私は間違いやこれが前に答えられている場合、私はとにかくそれを見つけることができませんでした。ループと変数のためのPython

は、ここに私のコードのジェネリック版です:

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の値が異なるクラスインスタンスのリストを作成するにはどうすればよいですか?

EDIT:インデントが正しい。

+0

コードを編集する必要があるか、またはリストに1回追加するだけです – macduff

+0

インデントがオフです。ループの内側に追加する必要があります。インデント 'classlist.append'もう一つのレベル –

答えて

2

最低でも、classlist.append(Class(var_1,count))をforループの内側に移動する必要があります。コードを仮定

は、以下である:

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

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属性、クラスのinitコードは、クラス属性を設定推測:

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

0

はそれを見つけた、私は私のコードで(それが価値だのではなく、クラスに数のインスタンスを渡していると思います、カウントはリストです)。

関連する問題