我正在实施动态编程算法,我收到了这个错误。这是我的代码:
def shoot(aliens):
s=[0]*10
s[0]=0
s[1]=0
for j in xrange(2,len(aliens)):
for i in xrange(0,j):
s[j]=max(s[i] + min(aliens[j],fib(j-i))) <---Error here
print s[len(aliens)-1]
return s[len(aliens)-1]
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
return fib(n-1) + fib(n-2)
aliens=[1,10,10,1]
print shoot(aliens)
它说:
Traceback (most recent call last):
File "module1.py", line 30, in <module>
print shoot(aliens)
File "module1.py", line 19, in shoot
s[j]=max(s[i] + min(aliens[j],fib(j-i)))
TypeError: 'int' object is not iterable
请帮帮我
更新: 哦,我明白了。 我的意思是
s[j]=max(s[i] + min(aliens[j],fib(j-i)))
但我错了。 所以,我编辑它,但我不知道如何使用max()来取出数组中的最大值。
b=0
for j in xrange(2,len(aliens)):
for i in xrange(0,j):
a[b]=(s[i] + min(aliens[j],fib(j-i)))
b+=1
s[j]=Largest(a[b]); <--How can I do that with Max() function
答案 0 :(得分:5)
max
和min
函数需要多个参数或一系列元素。您对min()
的呼叫有两个参数(确定),但您对max()
的呼叫只有一个。不确定你想在这里最大化...
答案 1 :(得分:2)
您正在执行以下操作:
>>> max(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
你想这样做吗?
s[j] = max(s[i], min(aliens[j],fib(j-i)))
或
s[j] = max(s[j], s[i] + min(aliens[j],fib(j-i)))
答案 2 :(得分:1)
max
需要一个可迭代的参数。
max(...)
max(iterable [,key = func]) - &gt;值 max(a,b,c,... [,key = func]) - &gt;值
使用单个可迭代参数,返回其最大项 如果有两个或多个参数,则返回最大的参数。
但s[i] + min(aliens[j],fib(j-i))
传递给它的是int
。你想要的可能是s[j]=max(s[i], min(aliens[j],fib(j-i)))
答案 3 :(得分:1)
这意味着您无法迭代单个int
对象。
max()
和min()
要求返回最大值的多个值。最小的,或者他们想要一个可以迭代的objkect。
您的max()
调用是使用一个参数执行的,然后应该是可迭代的,但不是。
答案 4 :(得分:1)
应该是,s [j] = max(s [i],min(外星人[j],fib(j-i))),不是吗?
答案 5 :(得分:0)
http://docs.python.org/2/library/functions.html#max
max(iterable[, key])
max(arg1, arg2, *args[, key])
你不是说:
s[j] = max(s[i], min(aliens[j],fib(j-i)))