간단한(?) 파이썬 질문
본문
def move(data) :
global a , x , y
"""i는 x, j는 y를 나타냄"""
i = 0
j = 0
if data == "R" :
i = 1
elif data == "U" :
j = -1
elif data == "L" :
i = -1
elif data == "D" :
j = 1
elif data == "RESTART" :
print("재시작 하겠습니다.")
restart()
return
else :
print("올바른 커맨드를 입력해주세요.")
return
if a[y+j][x+i] != "X" :
if a[y+j][x+i] == "." or a[y+j][x+i] == "-" :
x += i
y += j
a[y][x] = "0"
a[y-j][x-i] = "."
return
x += i
y += j
a[y][x] = "0"
a[y-j][x-i] = "."
if a[y+j][x+i] == "*" and a[y+(j*2)][x+(i*2)] != "X" :
if a[y+i][x+j] == "*" and a[y+(j*2)+i][x+(i*2)+j] != "X" :
a[y+(j*2)][x+(i*2)] = "*"
a[y+i][x+j] = "."
a[y+(j*2)+i][x+(i*2)+j] = "*"
elif a[y-i][x-j] == "*" and a[y+(j*2)-i][x+(i*2)-j] != "X" :
a[y+(j*2)][x+(i*2)] = "*"
a[y-i][x-j] = "."
a[y+(j*2)-i][x+(i*2)-j] = "*"
else :
a[y][x] = "*"
a[y-j][x-i] = "0"
x -= i
y -= j
print("그곳으로는 움직일수 없습니다1.")
elif a[y+j][x+i] == "*" and a[y+(j*2)][x+(i*2)] == "X" :
a[y][x] = "*"
a[y-j][x-i] = "0"
x -= i
y -= j
print("그곳으로는 움직일수 없습니다.")
else :
print("그곳으로는 움직일수 없습니다.")
def restart() :
global a , x , y
a = [\
["X","X","X","X","X","X","X","X","X","X"],\
["X",".",".","X","X","X",".",".",".","X"],\
["X",".",".",".",".",".",".",".",".","X"],\
["X",".","X","X",".","0",".",".",".","X"],\
["X",".",".","X",".",".",".",".",".","X"],\
["X",".","*","*",".",".","X","-","-","X"],\
["X",".","*","*",".",".","X","-","-","X"],\
["X",".",".",".",".",".",".",".",".","X"],\
["X","X","X","X","X","X","X","X","X","X"]\
]
for i in range(0,len(a)) :
for j in range(0,len(a[i])) :
if a[i][j] == "0" :
x = j
y = i
a = [\
["X","X","X","X","X","X","X","X","X","X"],\
["X",".",".","X","X","X",".",".",".","X"],\
["X",".",".",".",".",".",".",".",".","X"],\
["X",".","X","X",".","0",".",".",".","X"],\
["X",".",".","X",".",".",".",".",".","X"],\
["X",".","*","*",".",".","X","-","-","X"],\
["X",".","*","*",".",".","X","-","-","X"],\
["X",".",".",".",".",".",".",".",".","X"],\
["X","X","X","X","X","X","X","X","X","X"]\
]
for i in range(0,len(a)) :
for j in range(0,len(a[i])) :
if a[i][j] == "0" :
x = j
y = i
"""a[y][x] 이다"""
goal_x = [7,8]
goal_y = [5,6]
result = list()
"""도착지까지 옮겨놓았을때까지 실행했던 명령어들을 기록"""
while True :
counts = 0
for i in goal_y :
for j in goal_x :
if a[i][j] != "*" and a[i][j] != "0" :
a[i][j] = "-"
for i in range(0,len(a)) :
for j in range(0,len(a[i])) :
print(a[i][j],end = " ")
print("\n")
for i in range(0,len(a)) :
counts += a[i].count("-")
if counts == 0 :
break
answer = input("이동할 방향을 입력해주세요 : ")
move(answer)
print("성공!")
제가 파이썬을 배운지 얼마안됫지만 저번 행맨에 이어 두번째로 만든 작품입니다.
혹시 좀더 효율적으로 코드를 바꿀수 있거나, 필요없는 부분이 있는지 궁금한데
조언 부탁드립니다!
!-->답변 3
초 간단 소코반이군요.
파이썬 커뮤니티에 올리는 것이 낫지 않을까 싶군요.
주로 PHP/HTML/JavaScript/CSS를 다루는 곳이라;
키 입력은 여전히 불편하군요. 단일 키 이벤트를 찾아보세요.
대문자만 입력받는데, 소문자도 신경썼으면 좋았겠죠?
커서키 이용을 못하면, 많이 사용하는 w a s d 조합도 좋겠죠?
또는 2, 4, 6, 8 조합(키패드, NumLock Off) - wasd(WASD), 2468 모두 조건 추가하면 편하겠네요.
맵은 한 번 할당하면 되겠고
배열이 아닌 텍스트로 할당하는 것이 보기도 좋고 수정도 편하겠죠?
단일 상자, 단일 골인 지점이니 따로 goal_x, goal_y 할당할 필요도 없겠고요.
화면도 여전히 불편하군요.
이동 방향 입력 : [커서 입력 위치]
[맵 출력 위치]
아니면, 화면 지우는 것 한 줄(import까지 두 줄) 추가하면 좋겠네요.
세로로 한 줄 떨어져 있어서, 가로로도 한 칸 떨어뜨리는 것이 나아보이고요.
* 아스키 코드 좋은데, 한글 환경에서 번거로우니 패스
주로 1X1 기준이라 편했는데, 상자가 2X2 기준이라 은근 신경쓰이네요.
중지 처리(Q, Ctrl+C 등)도 여전히 아쉽고요.
대충 여기서 끊습니다.
제가 파알못이라 그러는데 이거 뭐 하는 프로그램이죠? 게임 같은데...
효율적인 것을 찾지 마시고, 그 시간에 그냥 다양하게 코딩을 해 보세요. 다른 사람 코딩 스타일도 분석해 보시고,
나중에 본인이 짠 코드를 다시 보면, 이렇게 하는 것이 더 효율적인 것 같다는 느낌이 든다면, 그 때 부터 실력이 늘고 있다는 것입니다.
그리고 코드를 올리고 싶으면 파이썬 소모임에 https://sir.kr/so_python 올리세요