1

我正在实现动态编程算法,我得到了这个错误。这是我的代码:

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
4

6 回答 6

6

maxmin函数需要多个参数或一系列元素。您的呼叫min()有两个参数(好的),但您的呼叫max()只有一个。不知道你想在这里最大化什么......

于 2013-07-18T08:58:52.830 回答
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)))
于 2013-07-18T08:59:16.980 回答
1

max需要一个可迭代的参数。

max(...)
max(iterable[, key=func]) -> value max(a, b, c, ...[, key=func]) -> value
使用单个可迭代参数,返回其最大项.
使用两个或更多参数,返回最大的参数。

但是你传递给它的s[i] + min(aliens[j],fib(j-i))是一个int. 你想要的可能是s[j]=max(s[i], min(aliens[j],fib(j-i)))

于 2013-07-18T08:58:03.647 回答
1

这意味着您不能迭代单个int对象。

max()并且min()想要一些它们返回最大的值。最小的,或者他们想要一个可以迭代的对象。

你的max()调用是用一个参数执行的,然后,它应该是可迭代的,但不是。

于 2013-07-18T08:58:22.123 回答
1

应该是,s[j] = max(s[i], min(aliens[j], fib(j-i)))不是吗?

于 2013-07-18T08:59:30.487 回答
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)))
于 2013-07-18T08:58:11.653 回答