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

时间:2018-06-04 22:18:01

标签: python python-3.x

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()

当我在第一步时按“s”时出现错误:

a[lst+1][item] = "O"
IndexError: list index out of range

这对我来说没有意义,因为我尝试打印lst+1而不是a[lst+1]并且它给了"2"这应该可以正常工作,因为a[2][number]没有给出错误。

我知道人们会说:“当你做出几个动作时,你已超出极限”,所以我再说一遍;我在第一步时按"s"。我试过了,我发现无论你在lst+1这里做什么,都会给出错误。

我创建了一个新文件,只编写了list并尝试在那里使用lst+1。它运作得很好。

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

1 个答案:

答案 0 :(得分:3)

当您设置a[lst+1][item] = "O"时,检测功能仍处于循环中并将再次迭代下一个项目if item == "O":,直到您到达a中的最后一个索引并返回索引错误。你应该做

if item == "O": move(nm_lst,nm_item) return

检查下一个输入。