로봇의 움직임을 자극하는 문제를 해결하려고합니다. 로봇은 위치 (0, 0, 'N')로 시작합니다. 명령은 문자열 목록에 제공됩니다. '회전'기능은 N에서 E에서 S에서 W로 회전하여 N으로 돌아갑니다. 이동 기능은 특정 방향 (N 축, Y 축, E 축, W 축)으로 이동합니다. N : y + 1 S : y-1 W : x-1 E : x + 1파이썬에서 재귀를 사용하는 방법
문제가있는 부분은 기능에서 바로 가기를 사용하려고 할 때입니다.
print(macro_interpreter(['turnleft', 'turnright'], {'turnleft': ['turn', 'turn', 'turn'], 'turnright' : ['turn'], 'bigleftturn' : ['move', 'move', 'turnleft', 'move', 'move'], 'bigrightturn' : ['move', 'move', 'turnright', 'move', 'move']}))
정의 대신 '턴'
def macro_interpreter(code, macros):
의 'turnleft'대신 [ '턴', '턴', '턴', 'turnright'를 사용하는 경우이 함수를 호출 그 용어는 사전에 주어진다. 내 코드는 첫 번째 명령 실행 후 종료, 그것은 목록
def macro_interpreter(code, macros):
x,y,index = 0, 0, 0
state = ['N', 'E', 'S', 'W']
for command in code:
if command in macros:
return macro_interpreter(macros[command], macros)
else:
if command == 'move':
if state[index] == 'N':
y += 1
elif state[index] == 'E':
x += 1
elif state[index] == 'S':
y -= 1
elif state[index] == 'W':
x -= 1
elif command == 'turn':
try:
index = index + 1
except IndexError:
index = 0
return (x, y, state[index])
예상되는 출력은 무엇입니까? 까지 내가 볼 수있는'턴'은 매크로 (두 번째 실행)에 존재하지 않으며''이동 '은 반환 된 코드의 일부가 아니므로, 그 블록 아래의 다른 조건은 절대 실행되지 않습니다 .. .. 그리고 또한 숫자를 증가 시키면'IndexError'가 발생하지 않을 것입니다. 누락 된 인덱스가있는 목록에 액세스하려고하면됩니다. – danidee