python - 如何避免 IndexError

标签 python

一些背景知识:

我正在编写一个基于单词的小型迷宫游戏,从一个由 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/

相关文章:

python - 用 python 制作 3D blob 更快的方法?

python - 计算 numpy 矩阵中 true 的周围(python)

python - macOS,是否可以终止单个 python 线程?

python - 在 Geany (Ubuntu) 上从 python 禁用/关闭/退出/退出终端屏幕

python - 如何在没有循环的情况下为多列设置值

python - Django REST Framework 中的并行序列化?或者其他加速模型序列化的方法?

python - 按时间间隔分组并获取满足条件的第一行

python - 从 python 3 中的用户输入中计算二元组?

python - 打印语句在 python 长鼻中不起作用

python - Pandas 中的箱线图