1

Collatz私は呼び出されたクラスとクラスのオブジェクトを作成する関数を所有しています。コラッツ共役collatz_itを使用して1に到達するためのステップ数と、ジェネレーターを使用して100万までの対応するステップを生成しようとしています

import collatz
values = {}
count = 0
#collatz.collatz_it(n)

def gen():
    n = 0
    x = 0
    while True:
        yield x
        n += 1
        x = collatz.collatz_it(n)

for i in gen():
    count += 1
    values[count] = i
    print values
    if count == 1000000:
        break

ご覧のとおり、指定された数値の collat​​z 予想を使用して 1 に到達するまでに必要なステップ数を生成し、対応する数値を使用して辞書に追加します、辞書の値を出力すると、出力はぎこちなく次のようになります。これ:

{1: 0}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>, 5: <collatz.Collatz instance at 0x01DCDEB8>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>, 5: <collatz.Collatz instance at 0x01DCDEB8>, 6: <collatz.Collatz instance at 0x01DCDE90>}
{1: 0, 2: <collatz.Collatz instance at 0x01DCA580>, 3: <collatz.Collatz instance at 0x01DCDF58>, 4: <collatz.Collatz instance at 0x01DCDFA8>, 5: <collatz.Collatz instance at 0x01DCDEB8>, 6: <collatz.Collatz instance at 0x01DCDE90>, 7: <collatz.Collatz instance at 0x01DE8940>}

print i必要な出力を取得する代わりに印刷する場合print values、これは基本的にprintステートメントが__str__クラスのメソッドをトリガーするためです

入力せずに辞書に実際の手順を追加する方法はありませんか<collatz.Collatz instance at 0x01DCDFA8>?メソッドからデータを取得する方法はありますか?__str__私の辞書は次のようになります:

{1: 0}
{1: 0, 2: 1}
{1: 0, 2: 1, 3: 7}
4

3 に答える 3

0

この行に必要な値を格納します。

values[count] = i

次のようなことをします

values[count] = i.value

また

values[count] = str(i)

__str__最後のケースでは、クラスのメソッドを作成したと仮定しています。

class Collatz:
...
def __str__(self):
    return str(self.value)
于 2013-07-03T16:46:50.047 に答える