약간의 배경 :IndexError를 방지하는 방법
나는 X의, O의와 F로 만든 간단한 미로로 시작하는 작은 단어 기반 미로 게임을 쓰고 있어요
내 미로의 목록입니다 X가 벽인 미로를 나타내는 목록, O는 열린 지점, F는 결승선입니다.
미로의 이름과 사용자의 현재 위치를 취하고 그 위치 (N, S, E 또는 W)에서 모든 법적 이동 목록을 반환하는 함수를 작성하려고합니다.
여기 내 연습 미로와 기능입니다.
def get_legal_directions(maze, position):
x = position[0]
y = position[1]
legal = []
if maze[x-1][y] == 'O' or maze[x-1][y] == 'F':
legal.append('N')
if maze[x+1][y] == 'O' or maze[x+1][y] == 'F':
legal.append('S')
if maze[x][y+1] == 'O' or maze[x][y+1] == 'F':
legal.append('E')
if maze[x][y-1] == 'O' or maze[x][y-1] == 'F':
legal.append('W')
return legal
>>> maze1 = [['X', 'X', 'X', 'X', 'X'], ['X', 'O', 'X', 'F', 'X'], ['X', 'O', 'X', 'O', 'X'], ['X', 'O', 'O', 'O', 'X'], ['X', 'X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X', 'X']]
>>>
입력 : get_legal_directions(maze1, (1,1))
출력 : ['S']
는
그래서 함수 I 미로와 상호 작용하는 사용자 위해서는 다른 함수 내의 함수를 사용할 경우에는, 일반적으로 여기서 일 보인다 나는 다음을 얻을
def interact():
maze = raw_input('Maze File: ')
x = maze[0]
y = maze[1]
pos = (1,1)
history = [pos]
while 1:
print 'You are at position', pos
command = raw_input('Command: ')
if command == 'Q':
com = raw_input('Are you sure you want to quit? [y] or [n]: ')
if com =='y':
print 'Thank you for playing - Goodbye!'
break
else: continue
elif command == 'L':
get_legal_directions(maze, pos)
else: print 'invalid command'
:
,이 수>>> interact()
Maze File: maze1
You are at position (1, 1)
Command: L
" if maze[x-1][y] == 'O' or maze[x-1][y] == 'F':
IndexError: string index out of range"
if 문을 작성한 방식에 이상이 있습니까? 아니면 다른 것입니까? 도움을 줄 수있는 사람에게 감사드립니다.
함수를 호출하려면 어떻게해야합니까? get_legal_directions()
?
maze = raw_input('Maze File: ')
함수는리스트의 목록을 대신 기대 :
는
스택 추적을 생략했습니다. –