0

この質問から得たこの関数は次のとおりです。

def f(n, p, k, t):
    return sum(sum(1 if n == 3 else
                   (0 if k == 1 else
                    (1/36) * f(n-1, p, k-1, t-(max(p,i)))
                    for i in xrange(1, 7)))
                   for p in xrange(1, 7))

print sum(f(5,j,3,15) for j in xrange(1, 7))

これを実行すると、次のような長いトレースバック エラー シーケンスが表示されます。

File "C:/Users/r/Documents/school/IB/Computer Science HL/Other Languages/Problem240/Problem240 - recursive2.py", line 6, in <genexpr>
for p in xrange(1, 7))
TypeError: 'int' object is not iterable

誰かが何が起こっているのか教えてもらえますか? コードの何が問題で、どうすれば修正できますか? ありがとうございました!

4

2 に答える 2

2

私はあなたが意味すると思います

def f(n, p, k, t):
    return sum(sum(1 if n == 3 else
                   (0 if k == 1 else
                    (1/36) * f(n-1, p, k-1, t-(max(p,i)))) # <- more here
                   for i in range(1, 7)) # <- less here
               for p in range(1, 7))

print(sum(f(5,j,3,15) for j in range(1, 7)))

(私はpython 3を使用していますが、基本的に同じです)。

括弧が間違っているため、内部の合計は期待どおりのジェネレーター式ではありません。

Python 2を使用しているため、以下のニブラーのポイントも参照してください

于 2013-02-21T00:48:54.350 に答える
1

自分のコードを理解できない場合は、コードを細かく分割してください

def f(n, p, k, t):
    ternary = (1 if n == 3 else 0 if k == 1 else 
        f(n-1, p, k-1, t-max(p,i))/36.0 for i in range(1, 7))

    inner_sum = sum(ternary)
    return sum(inner_sum for p in range(1, 7))
于 2013-02-21T00:57:29.960 に答える