2015-02-22 3 views
0

Я пытаюсь получить максимум между некоторыми ints, используя функцию Python max(). Тем не менее, я получаю этоTypeError: объект 'int' не итерируется с помощью max()

TypeError: 'int' object is not iterable. 

Это мой код:

def main(): 
    inputs =[] 
    inputted = int(raw_input()) 
    inputs.append(inputted) 
    for i in range(0,inputs[0]): 
     inputted = int(raw_input()) 
     inputs.append(inputted) 
    total = valor_max(inputs[1::], 0, len(inputs)-1) 

def valor_max(array, i, j): 
    if (i == j): 
     return array[0] 
    elif (i == (j-1)): 
     return (max(array[i], array[j])) 
    else: 
     return max((array[i]+min(valor_max(array, i+2, j))) , valor_max(array, i+1, j-1), array[j]+min(valor_max(array, i+1, j-1)), valor_max(array,i,j-2)) 

main() 

Я получаю ошибку в этой строке: return max((array[i]+min(valor_max(array, i+2, j))) , valor_max(array, i+1, j-1), array[j]+min(valor_max(array, i+1, j-1)), valor_max(array,i,j-2))

Может кто-нибудь объяснить мне, почему не могу я получить свой максимум, что путь ? Благодаря!

+0

когда вы получите ошибку на большую линии, разорвать линию на более мелкие заявления, скорее всего, вы увидите свою ошибку, когда все не вложено. Даже если вы этого не сделаете, Python сможет точно определить часть большей строки, которая вызывает ошибку. –

ответ

1

В какой-то момент в этой строке valor_max находится в первом случае (i == j) и возвращает одно число вместо итерабельного. Таким образом, один из двух вызовов min будет min(singleNumber), что приведет к появлению именно сообщения об ошибке.

Вместо того, чтобы ваша функция valor_max возвращала разные типы в зависимости от случая, вы всегда должны пытаться вернуть тот же тип. В вашем случае вы хотите вернуть итерируемый, список или кортеж. Таким образом, вы должны сделать первый случай возвратом, как и в других двух случаях:

return (array[0],) # this creates a tuple with a single element 

КПП. для длинных строк часто помогает разбить их на несколько операторов. Это не только позволяет лучше понять, что принадлежит (например, ваш код содержит некоторые дополнительные скобки вокруг первого параметра до max, но не к какому-либо другому), но он также позволяет Python сообщать вам, где именно произошла ошибка из «где-то в этой супер длинной линии»:

values = (
    array[i] + min(valor_max(array, i+2, j)), 
    valor_max(array, i+1, j-1), 
    array[j] + min(valor_max(array, i+1, j-1)), 
    valor_max(array, i, j-2) 
) 
return max(values) 
+0

@pokeУзнайте за свое время и свои советы. Вот что я делал неправильно – TomasCarvalho

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