게시판

검색 결과: 52

, 도장_ 관리자님이 작성
 

포럼 상단 오른쪽에 검색창에 23.7로 검색하면 이전 질문과 답변을 참조할 수 있습니다.

문의한 코드에 대해서 다음 입력을 넣고

3 3
...
...
..*

실행하면 결과는

000
000
00*
입니다.

지뢰가 있는 곳의 숫자를 카운팅하지 못하는 것으로 보입니다.

포럼 상단 고정에 파이썬 시각화 사이트 공지가 있습니다. 또는 Thonny를 설치해서 PC에서 직접 해볼 수도 있습니다.


https://pythontutor.com/visualize.html#code=col,%20row%20%3D%20map%28int,%20input%28%29.split%28%29%29%0A%0A%0Amatrix%20%3D%20%5B%5D%0A%0Afor%20i%20in%20range%28row%29%3A%0A%0A%20%20%20%20matrix.append%28list%28input%28%29%29%29%0A%0A%0A%0A%0Afor%20n%20in%20range%28row%29%3A%20%20%20%0A%0A%20%20%20%20for%20m%20in%20range%28col%29%3A%0A%0A%20%20%20%20%20%20%20%20if%20matrix%5Bn%5D%5Bm%5D%20%3D%3D%20'*'%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%0A%20%20%20%20%20%20%20%20matrix%5Bn%5D%5Bm%5D%20%3D%200%0A%0A%20%20%20%20%20%20%20%20for%20x%20in%20range%28n-1,%20n%2B2%29%3A%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20y%20in%20range%28m-1,%20m%2B2%29%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20x%20%3C%200%20or%20y%20%3C%200%20or%20x%20%3E%3D%20row%20or%20y%20%3E%3D%20col%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20matrix%5Bx%5D%5By%5D%20%3D%3D%20'*'%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20matrix%5Bn%5D%5Bm%5D%3Dmatrix%5Bn%5D%5Bm%5D%2B1%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%3A%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20matrix%5Bn%5D%5Bm%5D%3Dmatrix%5Bn%5D%5Bm%5D%0A%0A%0Afor%20i%20in%20list%28matrix%29%3A%0A%0A%20%20%20%20for%20j%20in%20i%3A%0A%0A%20%20%20%20%20%20%20%20print%28j,%20end%3D''%29%0A%0A%20%20%20%20print%28%29&cumulative=false&curInstr=8&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%223%203%22,%22...%22,%22...%22,%22..*%22%5D&textReferences=false

코드를 실행하고 입력을 각 라인별로 단계에 따라 입력하면 시각적으로 코드 실행을 확인할 수 있습니다.




이렇게 확인하면서 어떤 부분이 의도한 대로 동작하지 않는지 살펴보면 도움이 됩니다.

그래도 어렵다면 문제는 미뤄두고 다음 진도를 나간 다음에 언젠가 시간이 날 때 풀어보는 것을 추천합니다. 어렵다고 느꼈던 문제가 나중에 보면 쉽게 해결되기도 합니다. 이는 인간이 학습했기 때문이고, 이해도가 높아지기 때문입니다.


, 김 민정님이 작성
 

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


, 1 23님이 작성
 

일단 코드가 좀 길 수 있으니 양해 부탁드립니다.

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")라고 강조되어 있습니다.

따라서 행렬 안에서 저 데이터 안에는 문자가 있고 거기에 숫자를 더하는 상황일 수도 있고, 그 반대일 수도 있습니다. 어쨌거나 타입이 일치하지 않기 때문에 발생하는 문제입니다.

https://thonny.org/

Thonny를 설치해서 파이썬 프로그램을 단계별로 실행하면 메모리 내부에서 벌어지는 과정과 변수의 값을 볼 수 있습니다. 이걸로 디버깅해보세요.


, kang jisu님이 작성
 


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


이러한 오류가 떴습니다. 뭐가 문제였던걸까요?

, Yang Won Guen님이 작성
 
문의한 코드는 삭제합니다.


최대한 for문을 줄일 수 있는 방법이 있나요?

2개를 하나로 압축한다든가..

그리고 강좌 끝까지 수강하면 이런 스파게티 코드가 아니라 좀 효율적인 코드를 쓸수있을까요..

(도장_ 관리자님이 수정함 - 원문 제출일: 월요일, 28 12월 2020, 8:56 오전)