2015-01-23 6 views
4

Это решение проблемы, над которой я работаю (обучение Python), но даже решение дает мне ошибку.Объект Python типа «float» не имеет len()

Вот код:

def compute_deriv(poly): 

    """ 
    Computes and returns the derivative of a polynomial function. If the 
    derivative is 0, returns [0.0]. 

    Example: 
    >>> poly = [-13.39, 0.0, 17.5, 3.0, 1.0] # - 13.39 + 17.5x^2 + 3x^3 + x^4 
    >>> print compute_deriv(poly)  # 35^x + 9x^2 + 4x^3 
    [0.0, 35.0, 9.0, 4.0] 

    poly: list of numbers, length > 0 
    returns: list of numbers 
    """ 

    poly_deriv = [] 
    if len(poly) < 2: 
     return [0.0] 
    for j in xrange(1, len(poly)): 
     poly_deriv.append(float(j * poly[j])) 
    return poly_deriv 

Это решение дано мне, но когда я использую следующий код для вызова функции:

poly1 = (-13.39) 
print compute_deriv(poly1) 

Я получаю

TypeError: object of type 'float' has no len() 

Я пробовал пару разных вещей внутри оператора if (так как этот код ломается только тогда, когда len(poly) i с < 2;

Я попробовал poly_deriv.append(0.0) и return poly_deriv, например.

+0

В документе говорится, что вы должны называть 'poly' со списком. Попытайтесь это сделать. –

+0

http://www.wolframalpha.com/input/?i=what+is+the+derivative+of+13.39 – corn3lius

ответ

6

Я предполагаю, что в решении есть опечатка, и они предполагали, что это коллекция из одного элемента.

poly1 = (-13.39,) 

Или

poly1 = [-13.39] 

, как они его прямо сейчас, это один поплавок, а не коллекцию, содержащую один поплавок. (-13.39) синтаксически эквивалентен только -13.39 без круглых скобок.

+0

В этом была проблема. Когда я протестировал код, я рассеянно сделал список с одним значением (так, а не фактически список) без запятой. Благодаря! – Camoen

+0

так ... нажмите на галочку! – Almo

+1

Нужно подождать 6 минут, я уже пробовал! – Camoen

3

Строка poly1 = (-13.39) не является кортежем. Python читает это как скобку, не так, чтобы ваша переменная была просто числом. Вместо этого попробуйте более точное определение:

poly1 = tuple(-13.39) 
Смежные вопросы