게시판
검색 결과: 52
포럼 상단 오른쪽에 검색창에 23.7로 검색하면 이전 질문과 답변을 참조할 수 있습니다.
문의한 코드에 대해서 다음 입력을 넣고
3 3
...
...
..*
실행하면 결과는
000 000 00*입니다.
지뢰가 있는 곳의 숫자를 카운팅하지 못하는 것으로 보입니다.
포럼 상단 고정에 파이썬 시각화 사이트 공지가 있습니다. 또는 Thonny를 설치해서 PC에서 직접 해볼 수도 있습니다.
코드를 실행하고 입력을 각 라인별로 단계에 따라 입력하면 시각적으로 코드 실행을 확인할 수 있습니다.
이렇게 확인하면서 어떤 부분이 의도한 대로 동작하지 않는지 살펴보면 도움이 됩니다.
그래도 어렵다면 문제는 미뤄두고 다음 진도를 나간 다음에 언젠가 시간이 날 때 풀어보는 것을 추천합니다. 어렵다고 느꼈던 문제가 나중에 보면 쉽게 해결되기도 합니다. 이는 인간이 학습했기 때문이고, 이해도가 높아지기 때문입니다.
23.7 심사문제:지뢰찾기 직접한게 결과가 나오질 않아서
정답이 뭔지 도통 모르겟네요
정답 가르쳐주세요..
col, row = map(int, input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
for n in range(row):
for m in range(col):
if matrix[n][m] == '*':
continue
matrix[n][m] = 0
for x in range(n-1, n+2):
for y in range(m-1, m+2):
if x < 0 or y < 0 or x >= row or y >= col:
continue
if matrix[x][y] == '*':
matrix[n][m]=matrix[n][m]+1
else:
matrix[n][m]=matrix[n][m]
for i in list(matrix):
for j in i:
print(j, end='')
print()
코드에 대한 디버깅을 제공하지는 않습니다. 답변하기도 어렵습니다. 심사가 동작하지 않는 경우에 대해서만 답변합니다. 보통 결과는 심사는 잘 동작하고, 제출한 코드에 문제가 있는 경우입니다.
포럼 상단에 고정된 Thonny를 설치해서 단계별로 실행하면서 에러가 발생하는 부분을 추적하는 것도 도움이 될 겁니다.
포럼 상단 오른쪽에 23.7로 검색하면 이전 질문과 답변을 참조할 수 있습니다.
https://dojang.io/mod/forum/search.php?id=7&search=23.7
일단 코드가 좀 길 수 있으니 양해 부탁드립니다.
col, row=map(int, input().split())
matrix=[]
for i in range(row):
matrix.append(list(input()))
for i in range(row):
for j in range(col):
if matrix[i][j]=='.':
matrix[i][j]=0
i=0
while i<row:
j=0
while j<col:
for x in range(i-1,i+2):
for y in range(j-1,j+2):
if y < 0 or x < 0 or y >= col or x >= row:
continue
if y==j and x==i:
continue
if matrix[x][y]=='*':
matrix[i][j]+=1 #erorr
j+=1
i+=1
print(a[i][j])
이렇게 코드를 짜긴 했는데 저기 에러라고 표시한 부분에서 자꾸 에러가 뜨더라구요.해결할 방법이 뭔지 모르겠어서 질문해봅니다.
포럼 상단 오른쪽에 23.7로 검색하면 이전 질문과 답변을 참조할 수 있습니다.
코드를 단계별로 실행하고 싶다면 포럼 상단에 고정된 파이썬 온라인 시각화나 Thonyy를 이용해서 단계별로 실행하면서 살펴보세요. 그러면 해결의 실마리를 찾을 수 있을 겁니다.
코드에 대한 도움은 어렵습니다. 문제가 어려우면 패스하고 다음 단원을 학습하고, 언젠가 파이썬에 익숙해졌을 때 다시 도전하세요.
다음 검색 용어는 이 메시지의 HTML 마크업에서만 나타납니다. 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를 사용하세요!
이렇게 코드를 짰는데, 마지막에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를 벗어났다고 합니다. 무엇이 문제일까요...?
Traceback (most recent call last):
File "/Users/dungdi/Desktop/python/main.py", line 124, in <module>
matrix[i][j]+=1
TypeError: can only concatenate str (not "int") to str
에러 메시지를 잘 보면 문제가 된 코드와 에러 유형을 알 수 있습니다.문자열에만 문자열을 더할 수 있다는 뜻입니다.
concatenate는 연결하는 뜻이고, str to str은 str에 str을 연결할 수 있다. can only이므로 str to str만 가능하다는 뜻이죠.
심지어 (not "int")라고 강조되어 있습니다.
따라서 행렬 안에서 저 데이터 안에는 문자가 있고 거기에 숫자를 더하는 상황일 수도 있고, 그 반대일 수도 있습니다. 어쨌거나 타입이 일치하지 않기 때문에 발생하는 문제입니다.
Thonny를 설치해서 파이썬 프로그램을 단계별로 실행하면 메모리 내부에서 벌어지는 과정과 변수의 값을 볼 수 있습니다. 이걸로 디버깅해보세요.
col, row = map(int, input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
import copy
count = 0
b=copy.deepcopy(matrix)
for i in range(row):
for j in range(col):
if matrix[i][j]=="*":
continue
else:
matrix[i][j]==int(0)
for k in range(i-1,i+2):
for y in range(j-1,j+2):
if (matrix[k][y]=="*"):
matrix[i][j]+=1
else:
continue
print(matrix)
이렇게 코딩을 짜 보았는데,
Traceback (most recent call last):
File "/Users/dungdi/Desktop/python/main.py", line 124, in <module>
matrix[i][j]+=1
TypeError: can only concatenate str (not "int") to str
이러한 오류가 떴습니다. 뭐가 문제였던걸까요?
문의한 코드는 삭제합니다.
최대한 for문을 줄일 수 있는 방법이 있나요?
2개를 하나로 압축한다든가..
그리고 강좌 끝까지 수강하면 이런 스파게티 코드가 아니라 좀 효율적인 코드를 쓸수있을까요..
(도장_ 관리자님이 수정함 - 원문 제출일: 월요일, 28 12월 2020, 8:56 오전)