Python 2.7 Tic Tac Toe类型错误:';非类型';对象没有属性'__获取项目';

Python 2.7 Tic Tac Toe类型错误:';非类型';对象没有属性'__获取项目';,python-2.7,Python 2.7,我正在编写一个Tic-Tac-Toe游戏。我已经完成了大部分程序。但我一直在犯以下错误,我不明白我做错了什么。我尝试过用不同的格式 Traceback (most recent call last): File "C:/Users/Akshay Sastry/Documents/CS 303E/Tic-Tac-Toe.py", line 66, in <module> main() File "C:/Users/Akshay Sastry/Documents/CS 3

我正在编写一个Tic-Tac-Toe游戏。我已经完成了大部分程序。但我一直在犯以下错误,我不明白我做错了什么。我尝试过用不同的格式

Traceback (most recent call last):
  File "C:/Users/Akshay Sastry/Documents/CS 303E/Tic-Tac-Toe.py", line 66, in <module>
    main()
  File "C:/Users/Akshay Sastry/Documents/CS 303E/Tic-Tac-Toe.py", line 3, in main
    while isWinner(board) == 0 and movesLeft(board) == True:
  File "C:/Users/Akshay Sastry/Documents/CS 303E/Tic-Tac-Toe.py", line 20, in isWinner
    if (b[0][0]=='x') and (b[0][0]==b[0][1]==b[0][2]):
TypeError: 'NoneType' object has no attribute '__getitem__'
您的
makeBoard()
函数返回
None
。你应该这样做:

def makeBoard():
    return [['*','*','*'],['*','*','*'],['*','*','*']]
您的
makeBoard()
函数返回
None
。你应该这样做:

def makeBoard():
    return [['*','*','*'],['*','*','*'],['*','*','*']]

您的
isWinner
功能可以缩小3倍,如下所示

def isWinner(b):
    for i in range(3):
        if (b[i][0] != '*') and (b[i][0]==b[i][1]==b[i][2]): # all rows
            return b[i][0]
        if (b[0][i] != '*') and (b[0][i]==b[1][i]==b[2][i]): # all cols
            return b[0][i]
    if (b[0][0] != '*') and (b[0][0]==b[1][1]==b[2][2]): # tl-br diag
        return b[0][0]
    elif (b[0][2] != '*') and (b[0][2]==b[1][1]==b[2][0]): # bl-tr diag
        return b[0][2]
    else:
        return 0

然而,对于更大的电路板(如connect 4),您可以迭代电路板上的所有点,并编写一个方法,在每个方向上检查任意距离的循环,而不是对行可能位于的每个位置进行硬编码。

您的
isWinner
函数可以小3倍,如下所示

def isWinner(b):
    for i in range(3):
        if (b[i][0] != '*') and (b[i][0]==b[i][1]==b[i][2]): # all rows
            return b[i][0]
        if (b[0][i] != '*') and (b[0][i]==b[1][i]==b[2][i]): # all cols
            return b[0][i]
    if (b[0][0] != '*') and (b[0][0]==b[1][1]==b[2][2]): # tl-br diag
        return b[0][0]
    elif (b[0][2] != '*') and (b[0][2]==b[1][1]==b[2][0]): # bl-tr diag
        return b[0][2]
    else:
        return 0

然而,对于更大的电路板(如connect 4),您可以迭代电路板上的所有点,并编写一个方法,在每个方向上以任意距离检查循环,而不是对行可能位于的每个位置进行硬编码。

Wow!真不敢相信我错过了。谢谢哇!真不敢相信我错过了。谢谢