2014-11-24 1 views
-2

Я пытаюсь проверить позицию, чтобы увидеть, являются ли положения вокруг нее как действительными индексами, так и визуально рядом друг с другом в сетке (отсюда имя функции count_neighbor). В строке 8 я получаю IndexError, что означает оператор if, прежде чем он неправильно фильтрует недействительные и/или не соответствующие друг другу ячейки, которые он тестирует. Я не могу показаться, чтобы выяснить, почему ..Почему и где этот IndexError происходит?

def count_neighbours(grid, row, col): 
    count = 0 
    neighbors = ((1,0),(1,-1),(1,1), 
       (0,1),(0,-1), 
       (-1,0),(-1,-1),(-1,1)) 
    for x,y in neighbors: 
     if row+x >= 0 and col+y >= 0 and row+x < len(grid)-1 and col+y < len(grid)-1: 
      if grid[row+x][col+y] == 1: 
       count += 1 
    return count 

print count_neighbours(((1,0,1,0,1), 
         (0,1,0,1,0), 
         (1,0,1,0,1), 
         (0,1,0,1,0), 
         (1,0,1,0,1), 
         (0,1,0,1,0)),5,4) 

Ошибка:

Traceback (most recent call last): 
    File "test.py", line 17, in <module> 
    (0,1,0,1,0)),5,4) 
    File "test.py", line 8, in count_neighbours 
    if grid[row+x][col+y] == 1: 
IndexError: tuple index out of range 
+0

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

+0

вы проверяете «если x в связанном ИЛИ y находится в границах». 'Ы/или/и /'. – ch3ka

+0

@ ck3ka: 's/comment/answer /' – DSM

ответ

0

Ваш если заявление не является достаточно строгим. В настоящее время с помощью or:

if ((row+x >= 0 or col+y >= 0) 
    and 
    (row+x < len(grid)-1 or col+y < len(grid)-1)): 

Изменить в or с до and с:

if ((row+x >= 0 and col+y >= 0) 
    and 
    (row+x < len(grid)-1 and col+y < len(grid)-1)): 
+0

Кто-то предположил, что в комментариях к предыдущему ответу и его определенно зафиксировал этот тест. Но когда я добавляю другой кортеж, он все равно бросает ту же самую точную ошибку. – Jordan

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