一些背景知识:
我正在编写一个基于单词的小型迷宫游戏,从一个由 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']
所以该函数在这里似乎正常工作,但是当我在另一个函数中使用该函数以便用户与迷宫交互时,我得到了这个:
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 语句的方式有问题还是其他原因?感谢任何可以提供帮助的人。
如何让命令 L
调用函数 get_legal_directions()
?
最佳答案
这使得 maze 成为一个字符串:
maze = raw_input('Maze File: ')
您的函数需要一个列表列表。
关于python - 如何避免 IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9988057/