Python 2.7 Tic Tac Toe类型错误:';非类型';对象没有属性'__获取项目';
我正在编写一个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
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!真不敢相信我错过了。谢谢哇!真不敢相信我错过了。谢谢