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

max関数にminは、いくつかの引数または一連の要素が必要です。への呼び出しにmin()は 2 つの引数 (ok) がありますが、への呼び出しにmax()は 1 つしかありません。ここで何を最大化したいのかわからない...

于 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

であるはずs[j] = max(s[i], min(aliens[j], fib(j-i)))ですよね?

于 2013-07-18T08:59:30.487 に答える
1

intこれは、単一のオブジェクトを反復処理できないことを意味します。

max()最大の応答をmin()返す値の数のいずれかが必要です。最小のもの、または反復可能なオブジェクトが必要です。

あなたのmax()呼び出しは 1 つの引数で実行され、それは反復可能であるべきですが、そうではありません。

于 2013-07-18T08:58:22.123 に答える
1

max反復可能な引数が必要です。

max(...) max( iterable
[, key=func]) -> 値 max(a, b, c, ...[, key=func]) -> 値
.
引数が 2 つ以上ある場合は、最大の引数を返します。

しかし、あなたがそれに渡した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 に答える
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 に答える