Python 中递归函数出现:“TypeError: 'int' 对象不可迭代”
这个函数是我从这个问题中得到的,内容如下:
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
有人能告诉我发生了什么吗?我的代码哪里出错了,我该怎么修复它?谢谢!
2 个回答
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))
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,但基本上是一样的)。
你有一些括号用错了,所以里面的求和并不是你想的那种生成器表达式。
另外,看看下面gnibbler提到的内容,因为你在用Python 2