2013-07-18 20 views
1

Я реализовал алгоритм динамического программирования, и я получил эту ошибку. Это мой код:TypeError: объект 'int' не является итерируемым?

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 

Пожалуйста, помогите мне

UPDATE: о, я получаю это. Я имею в виду

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

Вы пробовали 'max (a)'? – glglgl

+0

Эта ошибка возникает также при использовании 'min (value, * set())', где второй аргумент обычно является непустым, но иногда может быть пустым. Простым обходным решением является «min (value, value, * set())». –

ответ

5

max и min функции требуют нескольких аргументов или ряда элементов. Ваш вызов min() имеет два аргумента (нормально), но ваш звонок max() имеет только один. Не уверен, что вы хотите, чтобы максимизировать здесь ...

1

max Требуется итерируемый аргумент.

max(...)
max(iterable[, key=func]) -> value max(a, b, c, ...[, key=func]) -> value
With a single iterable argument, return its largest item.
With two or more arguments, return the largest argument.

Но что вы прошли к нему s[i] + min(aliens[j],fib(j-i)) является int. То, что вы хотите, может быть s[j]=max(s[i], min(aliens[j],fib(j-i)))

1

Это означает, что вы не можете перебирать один int объект.

max() и min() хотите либо количество значений, для которых они возвращают наибольший соответственно. самые маленькие, или они хотят objkect, которые можно повторить.

Ваш вызов max() выполняется одним аргументом, который, следовательно, должен быть итерируемым, но не является.

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))) 
1

Она должна быть, с [J] = тах (с [I], мин (инопланетяне [J], Фибо (J-я))), не так ли?

Смежные вопросы