Python [lst+1][item]导致错误,而[lst-1][item]则正常
当我在第一步按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_项目 返回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。效果很好 我很抱歉,如果这是一个愚蠢的问题可能是。我发
检查下一个输入。不是[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()