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
。它运作得很好。
如果这是一个愚蠢的问题(可能是),我很抱歉。我发布了整个代码,因为我不知道在哪里可能搞砸了。
答案 0 :(得分:3)
当您设置a[lst+1][item] = "O"
时,检测功能仍处于循环中并将再次迭代下一个项目if item == "O":
,直到您到达a
中的最后一个索引并返回索引错误。你应该做
if item == "O":
move(nm_lst,nm_item)
return
检查下一个输入。