Python“;索引器:列表索引超出范围“;列表项不存在时出错

Python“;索引器:列表索引超出范围“;列表项不存在时出错,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,问题:当下面显示的代码是从我的代码的另一部分(显示在下面)运行时,它会产生一个索引错误,并在明显不在范围内时说“列表索引超出范围” 代码(Python版本3.6.3): def canwin(XoY): LookingForNum = True openspaces = [] dupeboard = board[:] a = 0 for i in range(9): if board[a

问题:当下面显示的代码是从我的代码的另一部分(显示在下面)运行时,它会产生一个索引错误,并在明显不在范围内时说“列表索引超出范围”

代码(Python版本3.6.3):

   def canwin(XoY):
        LookingForNum = True
        openspaces = []
        dupeboard = board[:]
        a = 0
        for i in range(9):
            if board[a] == " ":
                openspaces = openspaces + [a]
            a = a + 1
        a = 0
        for i in range(len(openspaces)):
                e = openspaces[a]
                dupeboard = [:]
                dupeboard[e] = XoY
                if dupeboard[0] == XoY and dupeboard[1] == XoY and dupeboard[2] == XoY:
                    return True
                elif dupeboard[3] == XoY and dupeboard[4] == XoY and dupeboard[5] == XoY:
                    return True
                elif dupeboard[6] == XoY and dupeboard[7] == XoY and dupeboard[8] == XoY:
                    return True
                elif dupeboard[0] == XoY and dupeboard[3] == XoY and dupeboard[6] == XoY:
                    return True
                elif dupeboard[1] == XoY and dupeboard[4] == XoY and dupeboard[7] == XoY:
                    return True
                elif dupeboard[2] == XoY and dupeboard[5] == XoY and dupeboard[8] == XoY:
                    return True

                elif dupeboard[0] == XoY and dupeboard[4] == XoY and dupeboard[8] == XoY:
                    return True
                elif dupeboard[2] == XoY and dupeboard[4] == XoY and dupeboard[6] == XoY:
                    return True
                else:
                    return False
                a = a + 1
                if canwin("O"):
                    move = findmove("O")
                    board[move] = "O"
                    ShowBoard(board)
                    FindingNum = False

                elif canwin("X"):
                    move = findmove("X")
                    board[move] = "O"
                    ShowBoard(board)
                    FindingNum = False
Traceback (most recent call last):
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 316, in <module>
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 283, in AIPlay
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 283, in AIPlay
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 259, in AIPlay
    if canwin("O"):
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 70, in canwin
    elif dupeboard[2] == XoY and dupeboard[5] == XoY and dupeboard[8] == XoY:
IndexError: list index out of range
从以下位置运行:

   def canwin(XoY):
        LookingForNum = True
        openspaces = []
        dupeboard = board[:]
        a = 0
        for i in range(9):
            if board[a] == " ":
                openspaces = openspaces + [a]
            a = a + 1
        a = 0
        for i in range(len(openspaces)):
                e = openspaces[a]
                dupeboard = [:]
                dupeboard[e] = XoY
                if dupeboard[0] == XoY and dupeboard[1] == XoY and dupeboard[2] == XoY:
                    return True
                elif dupeboard[3] == XoY and dupeboard[4] == XoY and dupeboard[5] == XoY:
                    return True
                elif dupeboard[6] == XoY and dupeboard[7] == XoY and dupeboard[8] == XoY:
                    return True
                elif dupeboard[0] == XoY and dupeboard[3] == XoY and dupeboard[6] == XoY:
                    return True
                elif dupeboard[1] == XoY and dupeboard[4] == XoY and dupeboard[7] == XoY:
                    return True
                elif dupeboard[2] == XoY and dupeboard[5] == XoY and dupeboard[8] == XoY:
                    return True

                elif dupeboard[0] == XoY and dupeboard[4] == XoY and dupeboard[8] == XoY:
                    return True
                elif dupeboard[2] == XoY and dupeboard[4] == XoY and dupeboard[6] == XoY:
                    return True
                else:
                    return False
                a = a + 1
                if canwin("O"):
                    move = findmove("O")
                    board[move] = "O"
                    ShowBoard(board)
                    FindingNum = False

                elif canwin("X"):
                    move = findmove("X")
                    board[move] = "O"
                    ShowBoard(board)
                    FindingNum = False
Traceback (most recent call last):
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 316, in <module>
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 283, in AIPlay
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 283, in AIPlay
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 259, in AIPlay
    if canwin("O"):
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 70, in canwin
    elif dupeboard[2] == XoY and dupeboard[5] == XoY and dupeboard[8] == XoY:
IndexError: list index out of range
我尝试过的内容:我尝试过检查python文档中的索引错误,但没有成功。我还检查了其他堆栈溢出问题,但运气不好

完全回溯:

   def canwin(XoY):
        LookingForNum = True
        openspaces = []
        dupeboard = board[:]
        a = 0
        for i in range(9):
            if board[a] == " ":
                openspaces = openspaces + [a]
            a = a + 1
        a = 0
        for i in range(len(openspaces)):
                e = openspaces[a]
                dupeboard = [:]
                dupeboard[e] = XoY
                if dupeboard[0] == XoY and dupeboard[1] == XoY and dupeboard[2] == XoY:
                    return True
                elif dupeboard[3] == XoY and dupeboard[4] == XoY and dupeboard[5] == XoY:
                    return True
                elif dupeboard[6] == XoY and dupeboard[7] == XoY and dupeboard[8] == XoY:
                    return True
                elif dupeboard[0] == XoY and dupeboard[3] == XoY and dupeboard[6] == XoY:
                    return True
                elif dupeboard[1] == XoY and dupeboard[4] == XoY and dupeboard[7] == XoY:
                    return True
                elif dupeboard[2] == XoY and dupeboard[5] == XoY and dupeboard[8] == XoY:
                    return True

                elif dupeboard[0] == XoY and dupeboard[4] == XoY and dupeboard[8] == XoY:
                    return True
                elif dupeboard[2] == XoY and dupeboard[4] == XoY and dupeboard[6] == XoY:
                    return True
                else:
                    return False
                a = a + 1
                if canwin("O"):
                    move = findmove("O")
                    board[move] = "O"
                    ShowBoard(board)
                    FindingNum = False

                elif canwin("X"):
                    move = findmove("X")
                    board[move] = "O"
                    ShowBoard(board)
                    FindingNum = False
Traceback (most recent call last):
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 316, in <module>
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 283, in AIPlay
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 283, in AIPlay
    PlayerPlay()
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 301, in PlayerPlay
    AIPlay(board)
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 259, in AIPlay
    if canwin("O"):
  File "C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py", line 70, in canwin
    elif dupeboard[2] == XoY and dupeboard[5] == XoY and dupeboard[8] == XoY:
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第316行,在
PlayerPlay()
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第301行,在PlayerPlay中
游戏(棋盘)
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第283行,在AIPlay中
PlayerPlay()
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第301行,在PlayerPlay中
游戏(棋盘)
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第283行,在AIPlay中
PlayerPlay()
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第301行,在PlayerPlay中
游戏(棋盘)
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第259行,在AIPlay中
如果能赢(“O”):
文件“C:\Users\user\Desktop\Pu\Testing Tic Tac Toe AI.py”,第70行,在canwin中
elif双面板[2]==XoY和双面板[5]==XoY和双面板[8]==XoY:
索引器:列表索引超出范围

在访问
板之前检查
板的大小(
len
)当您使用“双面板”时,您遗漏了
板[4]
。您应该像这样复制列表:
dupeboard=board[:]
请发布完整的回溯,格式为code。您是否尝试捕获错误并在except suite中打印相关数据你发现了什么。或者只是在有问题的行之前打印。发生了什么?编辑您的问题并添加回溯。不要发表多条评论
dupeboard=[board[0]、board[1]、board[2]、board[3]、board[5]、board[6]、board[7]、board[8]
你是想删掉
board[4]