学习 Python - 类型错误:'NoneType'对象不可下标



我正在尽我所能学习Python,因为我最近换了专业,迷上了计算机科学的世界!我真的很喜欢它,但有时也会像很多人一样陷入困境。我目前正在进行乌代米的课程,并试图解决第一个里程碑之一,然而似乎一切都会相应地发生,但。。。结果出错。。。我的想法还不完整,但我喜欢不时地进行测试,以确保一切按计划进行。

我得到了以下错误,但它仍然给了我结果。。。如果有人能给初学者任何提示或建议,我们将不胜感激!(第一个帖子!做得好!:'(

| | 
| | 
| | 
Player 1 are you X or O? X
Please Input a Number 1-9: 6
| | 
| |O
| | 
Traceback (most recent call last):
File "C:/Users/Danny/Desktop/Python/Python Bootcamp/Milestones/TicTacToe.py", line 76, in <module>
display(gameon_Board)
File "C:/Users/Danny/Desktop/Python/Python Bootcamp/Milestones/TicTacToe.py", line 17, in display
print(board[7]+'|'+board[8]+'|'+board[9])
TypeError: 'NoneType' object is not subscriptable 

下方代码

"""This is a TIC TAC TOE GAME!

You need to do the following...
We need to print a board.
Take in player input.
Place their input on the board.
Check if the game is won,tied, lost, or ongoing.
Repeat c and d until the game has been won or tied.
Ask if players want to play again.
Good Luck! """
#Display Board
def display(board):
print(board[7]+'|'+board[8]+'|'+board[9])
print(board[4]+'|'+board[5]+'|'+board[6])
print(board[1]+'|'+board[2]+'|'+board[3])
#Sets up player markers
def player_Marker():
marker = ' '
while marker != 'X' and marker != 'O':
marker = input("Player 1 are you X or O? ")

player1 = marker

if player1 == 'X':
player2 = 'O'
else:
player2 = 'X'

return (player1,player2)
#Takes User Position Input On Board
def player_Choice():
position = 'wrong'
while position not in range(1,10):
position = int(input("Please Input a Number 1-9: "))  

return position
#Tack on Inputs to Board
# CLEAN_Board = ['#',' ',' ',' ',' ',' ',' ',' ',' ',' ']
gameon_Board = ['#',' ',' ',' ',' ',' ',' ',' ',' ',' ']
def boardUP(board,position):
turn = 1
if turn == 1:
gameon_Board[position] = player1_Marker
turn = turn - 1
if turn == 0:
gameon_Board[position] = player2_Marker
turn += 1
return display(gameon_Board)

# All Together
game_on = True
gameon_Board = ['#',' ',' ',' ',' ',' ',' ',' ',' ',' ']
while game_on:
display(gameon_Board)

player1_Marker , player2_Marker = player_Marker()

position = player_Choice()
gameon_Board = boardUP(gameon_Board,position)
display(gameon_Board)

display()不返回任何内容,它只是打印电路板。因此,默认返回值为None

但是boardUP()return display(gameon_Board)结束,所以它返回None的值。

然后你用把这个结果分配回变量

gameon_Board = boardUP(gameon_Board,position)

因此,在第一次迭代之后,gameon_Board不再包含板元素列表,而是包含None。然后当你试图访问它的下标时,你会得到一个错误。

此外,您将板作为参数传递给boardUP,但它从不使用它;它使用全局变量。您应该使用参数。

将功能更改为:

def boardUP(board,position):
turn = 1
if turn == 1:
board[position] = player1_Marker
turn = turn - 1
if turn == 0:
board[position] = player2_Marker
turn += 1
display(board)
return board

最新更新