2015-08-27 4 views
0

Я запустил следующий код в Python 2.7 и получил ошибку. Зачем?Python - TypeError: объект 'float' не имеет атрибута '__getitem__'

КОД:

def triangle_area(a, b, c): 
    """ 
    Returns the area of a triangle given the length of three sides 
    Code source: [here][1] 
    """ 
    def distance(p1, p2): 
     return math.hypot(p1[0]-p2[0], p1[1]-p2[1]) 

    side_a = distance(a, b) 
    side_b = distance(b, c) 
    side_c = distance(c, a) 
    s = 0.5 * (side_a + side_b + side_c) 
    return math.sqrt(s * (s - side_a) * (s - side_b) * (s - side_c)) 

Запуск следующее: у = triangle_area (10.1,1.1,11.2)

Производит эту ошибку: Traceback (последний звонок последний):

[snip] 
....in distance 
return math.hypot(p1[0]-p2[0], p1[1]-p2[1]) 
TypeError: 'float' object has no attribute '__getitem__' 
+0

'P1' или' P2' является поплавок objects.It не имеет индексации. – itzMEonTV

+2

Вы отправляете числа с плавающей запятой в функцию 'distance', которая затем пытается их индексировать. Вы не можете этого сделать. Что вы ожидаете от этого? – TigerhawkT3

+0

Я думаю, вы прибили его. Я нашел этот код на странице https://code.activestate.com/recipes/576896-3-point-area-finder/ и, ошибочно, предположил, что он сработал. Выключить, чтобы перекодировать ... – WyomingGeezer

ответ

1

Функция расстояния в этом фрагменте предполагает, что вы передадите ей кортежи для позиции (x, y) точек.

Так, чтобы вычислить площадь треугольника с вершинами в точке (0,0), (0,1), (1,1), вы назвали бы

triangle_area((0,0), (0,1), (1,1)) 
+0

Yup! Я обнаружил, что я думал, что функция обрабатывает длину сторон. НЕПРАВИЛЬНО! Это, как вы отметили, обрабатывает положение трех точек. TNX для вашего ответа. – WyomingGeezer