2014-11-24 2 views
-2

그 위치가 유효한 인덱스인지 그리드 시스템에서 시각적으로 서로 인접 해 있는지 (즉, count_neighbor 함수 이름) 위치를 확인하려고합니다. 8 행에서 올바르지 않은 필터링을 수행하기 전에 if 문을 의미하는 IndexError가 발생하고 있거나 테스트중인 다른 셀 옆에 ifEntry가 있습니다. 나는왜이 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가 경계에 있는지"를 확인하고 있습니다. 's/또는 /와 /'. – 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)): 

변경 orand s의 :

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

누군가가 이전 대답에 대한 의견에서 확실히 그 시험을 고정 시켰습니다. 그러나 다른 튜플에 넣을 때 여전히 똑같은 오류가 발생합니다. – Jordan