0

2D 배열을 반복하는 동안 문제가 발생합니다. 나는 4X3 그리드를 통과하고 요청 된 좌표를 한 문자에서 다른 문자로 변경하는 대신 "B"또는 "W"를 "삭제"하고 대신 아무 것도 남기지 않습니다 ('-'문자). 나는 늘 코드의 niddy griddy에 들어가,하지만 난 현재이 그리드 함께 일하고 있다는 무슨 말을 할 수2 차원 어레이가 범위 밖으로 벗어날 때 ?? (PYTHON)

B W B W   <= trying =>  A1 A2 A3 A4 
W B W B  to get these to  B1 B2 B3 B4 
B W B W  <=correspond=>  C1 C2 C3 C4 

B = 블랙 게임 조각 W = 흰색 게임 조각

여기에 코드 조각이있어서 내가 어디로 갈지 볼 수 있습니다. 그런 다음 내가 원하는 것을 게시 할 것입니다.

removeB = input("~BLACK Player, remove one of your 'B's by typing in the coordinance: ") 
print("") 
removeW = input("~WHITE Player, remove one of your 'W's by typing in the coordinance: ") 
print("") 
newgrid = copy_grid(board) 
for r in range(numrows): 
    for c in range(numcols): 
     if(removeB == 'A1'): 
      newgrid[r][c] = '-' 
     elif(removeB == 'A2'): 
      newgrid[r][c+1] = '-' 
     elif(removeB == 'A3'): 
      newgrid[r][c+2] = '-' 
     elif(removeB == 'A4'): 
      newgrid[r][c+3] = '-' 
     elif(removeB == 'B1'): 
      newgrid[r+1][c] = '-' 
    etc....etc...etc...' 
     if(removeW == 'A1'): 
      newgrid[r-1][c-1] = '-' 
     elif(removeW == 'A2'): 
      newgrid[r-1][c-1] = '-' 
     elif(removeW == 'A3'): 
      newgrid[r-1][c+1] = '-' 
     elif(removeW == 'A4'): 
      newgrid[r-1][c+2] = '-' 
     elif(removeW == 'B1'): 
      newgrid[r][c-1] = '-' 
    etc....etc...etc... 

당신은 내가 2로 이동하면 나는 내가의 서식을 변경 문까지 인덱스 값으로 확인 좌표 뉴 그리드 경우에 것을 볼 수 있습니다. 두 가지 방법 모두에서 동일한 오류 메시지가 표시된다는 것을 알았으므로 테스트 목적으로이 작업을 수행했습니다. 따라서 내 혼란 .... 또한, if/else 문 양쪽 모두에서 플레이어의 Color가 아닐지라도 위치를 확인하기 때문에 문제가 발생한다는 것을 알고 있습니다. 나는 협조를 얻을 좌표를 얻을 일단이 얻을 것이다. 여기

내가 원하는 출력되면 removeB = A1 및 removeW는 = C4 :

Traceback (most recent call last): 
    File "<pyshell#29>", line 1, in <module> 
    initial() 
    File "C:\Users\Ted\Desktop\Lab3.1Final.py", line 84, in initial 
    newgrid[r][c] = '-' 
    IndexError: list index out of range 

라인 84 :

여기
- W B W 
    W B W B 
    B W B - 

오류 메시지 인 첫 번째 if (removeB == 'A1') 바로 다음에 오는 줄이며 de에서 값을 변경합니다. 지루한 좌표.

최상의 답변을 제공하는 데 도움이된다면이 질문과 관련된 다른 코드를 제출해야하는지 알려 주시기 바랍니다. 미리 감사드립니다!

+1

직접 문제와 관련,하지만 당신은 스위치/case 문 보라되지 않음 (적어도, 파이썬의 버전) 다음과 같이 : HTTP ://stackoverflow.com/questions/11479816/what-is-the-python-equivalent-for-a-case-switch-statement –

+1

아마도 뭔가를 놓치고 있지만 A4로 입력한다고 가정하면 if 문은 보이지 않습니다. 그래서 그것이 c (1,2,3,4)가 처음 0 + 4 = 4 (좋은 대답)가 될 것이기 때문에 매번 깨는 것은 3 번 더 보일 것입니다. 다음보기 1 + 4 = 5 (잘못된 대답) 등등 ... 왜 여기에 모든 루프가 있습니까? 나는 이것이 완전히 새로운 방식으로 접근하는 것이 가장 좋을 것이라고 생각한다. (나는 더 멀리 도울 수있다.) –

답변

1

당신은 훨씬 더 간단하게 이것에 대해 갈 수

In [1]: grid = [['B','W','B','W'],['W','B','W','B'],['B','W','B','W']] 

In [2]: def show_grid(grid): 
    ...:  print(*(" ".join(row) for row in grid),sep='\n') 
    ...:  

In [3]: def delete_at_coordinate(grid,coordinate): 
    ...:  row = ord(coordinate[0]) - 65 
    ...:  col = int(coordinate[1]) - 1 
    ...:  grid[row][col] = '-' 
    ...:  

In [4]: removeB = 'A1' 

In [5]: removeA = 'C4' 

In [6]: show_grid(grid) 
B W B W 
W B W B 
B W B W 

In [7]: delete_at_coordinate(grid,removeB) 

In [8]: delete_at_coordinate(grid,removeA) 

In [9]: show_grid(grid) 
- W B W 
W B W B 
B W B - 
관련 문제