2016-11-29 3 views
-1

그래서이 코드 스 니펫을 사용하고 있는데 인덱스가 범위를 벗어났습니다. 나는 왜 그런지 볼 수는 없지만 그것이 나에게 오류를주고있다.python IndexError : 범위를 벗어 났습니까?

Grid = [[0,0,0,0],[0,0,0,0]] 

def SpawnNumber(Grid): 
    # Check is true when the random grid space is a 0 
    check = False 
    # Loop until an empty space is chosen 
    while check == False: 
     rn1 = randint(0,3) 
     rn2 = randint(0,3) 
     print(rn1) 
     print(rn2) 
     # If the space is empty, fill it 
     if Grid[rn1][rn2] == 0: 
      Grid[rn1][rn2] = 2 
      check = True 
    return(Grid) 

그리드는 왜 randint (0.3) 범위를 벗어난 것입니다 각각 0-3에서가는 두 개의 차원을해야합니까?

+0

'rn1'은 0-1부터 시작해야합니다. 두 개의 하위 목록 만 있습니다. –

답변

0

그리드에는 인덱스 0과 1이있는 요소가 두 개 있습니다. len (격자)를 평가하여 빠른 점검을 수행 할 수 있습니다. 나는. rn1은 0과 1의 값만 가질 수 있습니다.

+0

간단히 말해서, rn1이 0 또는 1로 제한되도록 코드를 변경하면 갈 수 있습니다. –

0

이 경우, 전송하려는 "그리드"에 예상되는 인덱스 항목이 없습니다.

은 함수보다 일반적인 될 수와 같은 것을 할 수있는 당신에 전달 그리드의 다양한 소화하려면

def SpawnNumber(Grid): 
    # Check is true when the random grid space is a 0 
    check = False 
    # Loop until an empty space is chosen 
    while check == False: 
     rn1 = randint(0,len(Grid)-1) 
     rn2 = randint(0,len(Grid[rn1])-1) 
     print(rn1) 
     print(rn2) 
     # If the space is empty, fill it 
     if Grid[rn1][rn2] == 0: 
      Grid[rn1][rn2] = 2 
      check = True 
    return(Grid) 

가 -1 때문에 RandInt의 포함 논리 거기에 존재합니다. 워드 프로세서 당 :

random.randint(a, b) 
    Return a random integer N such that a <= N <= b 

사소한 스타일의 노트 : 기록 된이 기능은 빈 공간을 찾을 수 없습니다가있는 경우가 무한 루프에 들어갈 것이라고 문제를 가지고있다. 그래서 일종의 브레이크 아웃 논리를 갖는 것이 좋습니다. 그리드가 한 요소 만 깊숙하게 읽는 것을 알고 있다면 다음과 같이 할 수 있습니다.

def SpawnNumber(Grid): 
    # Check is true when the random grid space is a 0 
    check = False 
    # Check if there are any open spots 
    for row in Grid: 
     if all(row): 
      check = True 
    # Loop until an empty space is chosen 
    while check == False: 
     rn1 = randint(0,len(Grid)-1) 
     rn2 = randint(0,len(Grid[rn1])-1) 
     print(rn1) 
     print(rn2) 
     # If the space is empty, fill it 
     if Grid[rn1][rn2] == 0: 
      Grid[rn1][rn2] = 2 
      check = True 
    return(Grid) 
관련 문제