2015-12-07 9 views
0

Я создаю программу, которая включает в себя класс прямоугольника, а также класс точки и холста. Одна из меньших функций, заданная нами, является общей точечной функцией, которая определяет, имеет ли холст под рукой общую точку в своем массиве прямоугольников. Я получаю ошибку индекса списка, но я не понимаю, почему.Общая точка в массиве прямоугольников

Вот общая функция точки:

def common_point(self): 
    '''(Rectangle) -> Boolean 
    Returns True if rectangles in canvas all ahare a common point''' 
    common = False 
    for i in range(len(self.data)): 
     for j in range(len(self.data),-1,-1): 
      if self.data[i].intersects(self.data[j]) == True: 
       common = True 
      else: 
       return False 
    return common 

и здесь функция пересекает ее вызова:

def intersects(self,other): 
    '''(Rectangle, Rectangle) -> Boolean 
    Returns True if the two Rectangles intersect''' 
    return not(self.p2.y < other.p1.y or self.p1.y > other.p2.y or self.p2.x < other.p1.x or self.p1.x > other.p2.x) 

любая помощь, почему бы весьма признателен

+0

Что такое сообщение об ошибке? Указывает ли номер строки? –

+0

@ClaytonWahlstrom, если self.data [i] .intersects (self.data [j]) == True: IndexError: индекс индекса за пределами диапазона - это ошибка, которую он читает –

+0

Ниже объясняется ответ. Диапазон пуска слишком высок. –

ответ

1

range(len(self.data),-1,-1) возвращается список с длиной len(self.data) + 1. Это всегда приведет к ошибке индекса при повторном использовании этого диапазона.

Я подозреваю, что вы хотите:

for j in range(len(self.data) - 1, -1, -1): 
+0

Спасибо, я понял, что был близок, спасибо вам, тем не менее! –

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