23.7 심사문제 질문입니다.
, 서 진원님이 작성이렇게 코드를 짰는데, 마지막에col, row = map(int, input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
for j in range(col):
if matrix[i][j] == '*':
continue
else:
matrix[i][j] = 0
for y in range(i-1, i+2):
for x in range(j-1, j+2):
if y < 0 or x < 0 or y >= row or x >= col:
continue
elif matrix[y][x] == '*':
matrix[i][j] += 1
for i in range(row):
for j in range(col):
print(matrix[i][j], end='')
print()
if y < 0 or x < 0 or y >= row or x >= col:
이렇게 조건식을 달고 elif로 넘어갔음에도 계속 index를 벗어났다고 합니다. 무엇이 문제일까요...?
Re: 23.7 심사문제 질문입니다.
, 도장_ 관리자님이 작성시각적으로 디버깅하기 위해 Thonny를 설치하세요.
여기에 코드를 붙여 넣습니다.
Ctrl + F5로 디버그로 시작하고, F7 키를 눌러서 한 단계씩 실행합니다.
메뉴에서는 View > Variabls를 선택하면 변수 값의 목록을 오른쪽에 볼 수 있습니다.
한 단계씩 실행하고 하단의 Shell에서 첫 번째 input에 대해서 3 3을 입력합니다.
F7로 한 단계씩 계속 실행해서 두 번째 input에 대해서 ...을 입력합니다.
F7로 계속 실행하면 마지막 조건에서는 가장 안쪽의 조건에서 4개의 조건문이 모두 False로 평가된 상태까지 실행할 수 있습니다.
elif에서는 0 == '*'로 평가되는 상태도 지켜볼 수 있습니다.
F7로 계속 진행해 보면 첫 번째 ...이 끝나고 다음 줄로 상태가 넘어갑니다.
오른쪽 Variables 창을 보면 y는 1입니다. 이제 다음 줄에 대해서 처리하는 것이죠.
그러나 지금까지의 코드에서 입력은
3 3
...
이게 전부입니다. 그 다음 데이터가 없습니다.
3x3 크기라면
...
.?.
..*
? 위치에서 주변에 지뢰가 있는지 계산하는 것입니다.
따라서 먼저 모든 입력을 받아야 합니다.
첫 번째 줄만 입력 받아서는 주변에 지뢰가 있는지 판단하는 게 불가능합니다.
로직의 첫 번째 가정이 틀린 것을 알 수 있습니다.
Thonny를 사용하세요!