Python [lst+1][item]导致错误,而[lst-1][item]则正常

Python [lst+1][item]导致错误,而[lst-1][item]则正常,python,python-3.x,Python,Python 3.x,当我在第一步按s时,我得到一个错误: a[lst+1][项目]=O 索引器:列表索引超出范围 这对我来说没有意义,因为我尝试打印lst+1而不是[lst+1],它给出了2,这应该很好,因为[2][number]不会给出错误 我知道人们会说:你做了几次动作就超过了极限,所以我重复一遍;我第一步按s键。我试过了,我发现不管lst是什么,当你在这里做lst+1时,它都会给出一个错误 我创建了一个新文件,只编写了一个列表,并尝试在那里使用lst+1。效果很好 我很抱歉,如果这是一个愚蠢的问题可能是。我发

当我在第一步按s时,我得到一个错误:

a[lst+1][项目]=O 索引器:列表索引超出范围 这对我来说没有意义,因为我尝试打印lst+1而不是[lst+1],它给出了2,这应该很好,因为[2][number]不会给出错误

我知道人们会说:你做了几次动作就超过了极限,所以我重复一遍;我第一步按s键。我试过了,我发现不管lst是什么,当你在这里做lst+1时,它都会给出一个错误

我创建了一个新文件,只编写了一个列表,并尝试在那里使用lst+1。效果很好

我很抱歉,如果这是一个愚蠢的问题可能是。我发布了整个代码,因为我不知道哪里可能会出错。

当您设置[lst+1][item]=O时,detect函数仍处于循环中,如果item==O:将再次迭代下一个项,直到到达a中的最后一个索引并返回一个索引错误。你应该这样做

如果项目==O: 移动nm_lst,nm_项目 返回


检查下一个输入。

不是[2][2]导致错误,而是[5][2]。您在detect中使用的循环将第一个索引推出边界。你的全局变量inp正导致/将导致你发现这些奇怪的难以识别的错误-试着重组你的程序以消除这些错误。你试过调试吗?通过更改[lst+1][item]=O,第9行将多次调用move,因为item正在更改。
a = [[".",".",".",".","."],[".",".","O",".","."],[".",".",".",".","."],\
     [".",".",".",".","."],[".",".",".",".","."]]

def detect():
    global a
    for nm_lst, lst in enumerate(a):
        for nm_item, item in enumerate(lst):
            if item == "O":
                move(nm_lst,nm_item)

def move(lst,item):
    global a
    a[lst][item] = "."
    if inp == "w":
        if lst == 0:
            a[lst][item] = "O"
        else:
            a[lst-1][item] = "O"
    elif inp == "s":
            a[lst+1][item] = "O"

def print_board(board):
    for smthng in board:
        new = " ".join(smthng)
        print(new)
def game():
    global inp
    print_board(a)
    inp = input("w/a/s/d: ")
    detect()
while True:
    game()