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啊,我现在明白了。非常感谢你,这帮了大忙。我能够创建一个现在不会出现任何错误的工作函数。再次感谢,并为糟糕的格式感到抱歉。。。我仍然习惯于这个网站的格式设置。