Python 3.x 为什么会出现未定义错误?

Python 3.x 为什么会出现未定义错误?,python-3.x,multidimensional-array,Python 3.x,Multidimensional Array,我正在尝试制作一个允许两个人玩井字游戏的程序。他们应该先选择一行,然后选择一列,然后将令牌放置在该位置。我不熟悉多维列表,我有点挣扎。这就是我到目前为止所做的: def showBoard(): board = [[0,0,0,], [0,0,0], [0,0,0]] print("-------------") print('|',board[0][0], '|',board[0][1], '|',board

我正在尝试制作一个允许两个人玩井字游戏的程序。他们应该先选择一行,然后选择一列,然后将令牌放置在该位置。我不熟悉多维列表,我有点挣扎。这就是我到目前为止所做的:

def showBoard():
    board = [[0,0,0,],
             [0,0,0],
             [0,0,0]]    

    print("-------------")
    print('|',board[0][0], '|',board[0][1], '|',board[0][2],'|')
    print("|---+---+---|")
    print ('|',board[1][0], '|',board[1][1], '|',board[1][2],'|')
    print("|---+---+---|")
    print ('|',board[2][0], '|',board[2][1], '|',board[2][2],'|')
    print("-------------")


def playerX():

    row = input("Enter a row (0, 1, or 2) for player X: ")
    column = input("Enter a column (0 , 1, or 2) for player X: ")
    board[row][column] = "X"


def main():

    showBoard()
    playerX()



main()
但是它总是抛出错误builtins.NameError:name'board'未定义。
我可以使用与我所拥有的类似的代码吗?或者我需要使用append()吗?

您的问题是在
绘图板中定义
board
,然后尝试在
playerX
中使用它。范围内定义的变量(如函数)不能在该范围外使用。如果需要在其他地方使用该变量,请全局定义它,或者更好地将其作为参数传入:

def newBoard():
    # Create a new board, then return it
    #  so it can be used elsewhere. 
    return [[0,0,0],
            [0,0,0],
            [0,0,0]]   

def showBoard(board):
    print("-------------")
    print('|',board[0][0], '|',board[0][1], '|',board[0][2],'|')
    print("|---+---+---|")
    print ('|',board[1][0], '|',board[1][1], '|',board[1][2],'|')
    print("|---+---+---|")
    print ('|',board[2][0], '|',board[2][1], '|',board[2][2],'|')
    print("-------------")

def playerX(board):
    row = int(input("Enter a row (0, 1, or 2) for player X: ")) 
    column = int(input("Enter a column (0 , 1, or 2) for player X: ")) 

    board[row][column] = "X"

def main():
    board = newBoard() 

    showBoard(board)
    playerX(board)

main()
我改变的是:

  • 我创建了一个
    newBoard
    函数来创建一个新板。然后我在
    main
    中使用它创建了一个板

  • 我让
    drawBoard
    playerX
    接受该板作为参数。然后,我将我在
    main
    中创建的板传递到每个

  • 我这样做是为了在输入用于索引之前将其转换为数字


您的问题是您在
绘图板
内部定义了
,然后试图在
playerX
中使用它。范围内定义的变量(如函数)不能在该范围外使用。如果需要在其他地方使用该变量,请全局定义它,或者更好地将其作为参数传入:

def newBoard():
    # Create a new board, then return it
    #  so it can be used elsewhere. 
    return [[0,0,0],
            [0,0,0],
            [0,0,0]]   

def showBoard(board):
    print("-------------")
    print('|',board[0][0], '|',board[0][1], '|',board[0][2],'|')
    print("|---+---+---|")
    print ('|',board[1][0], '|',board[1][1], '|',board[1][2],'|')
    print("|---+---+---|")
    print ('|',board[2][0], '|',board[2][1], '|',board[2][2],'|')
    print("-------------")

def playerX(board):
    row = int(input("Enter a row (0, 1, or 2) for player X: ")) 
    column = int(input("Enter a column (0 , 1, or 2) for player X: ")) 

    board[row][column] = "X"

def main():
    board = newBoard() 

    showBoard(board)
    playerX(board)

main()
我改变的是:

  • 我创建了一个
    newBoard
    函数来创建一个新板。然后我在
    main
    中使用它创建了一个板

  • 我让
    drawBoard
    playerX
    接受该板作为参数。然后,我将我在
    main
    中创建的板传递到每个

  • 我这样做是为了在输入用于索引之前将其转换为数字


请正确设置代码格式。这几乎肯定是一个范围问题,但当您混淆代码中的范围时,很难诊断。但从外观上看,您似乎在
展示板
中定义了
,这意味着它只能从内部
showBoard
@carcigenicate访问。我尝试将所有内容放入main,现在我得到了内置项。TypeError:列表索引必须是整数或切片,而不是str error。这似乎是非常令人沮丧的。解决范围界定问题的方法不是将所有内容都放在同一个函数中,而是了解什么是范围界定,并利用它为自己带来好处。新的错误是因为您试图用字符串索引列表<代码>板[“1”]
是不允许的。您需要先使用
int
将字符串转换为数字,然后再尝试使用它进行索引<代码>输入返回字符串,而不是数字。@carcigenicate啊,我现在明白了。非常感谢你,这帮了大忙。我能够创建一个现在不会出现任何错误的工作函数。再次感谢,并为糟糕的格式感到抱歉。。。我仍然习惯于此网站的格式设置。请正确设置代码的格式。这几乎肯定是一个范围问题,但当您混淆代码中的范围时,很难诊断。但从外观上看,您似乎在
展示板
中定义了
,这意味着它只能从内部
showBoard
@carcigenicate访问。我尝试将所有内容放入main,现在我得到了内置项。TypeError:列表索引必须是整数或切片,而不是str error。这似乎是非常令人沮丧的。解决范围界定问题的方法不是将所有内容都放在同一个函数中,而是了解什么是范围界定,并利用它为自己带来好处。新的错误是因为您试图用字符串索引列表<代码>板[“1”]是不允许的。您需要先使用
int
将字符串转换为数字,然后再尝试使用它进行索引<代码>输入返回字符串,而不是数字。@carcigenicate啊,我现在明白了。非常感谢你,这帮了大忙。我能够创建一个现在不会出现任何错误的工作函数。再次感谢,并为糟糕的格式感到抱歉。。。我仍然习惯于这个网站的格式设置。