Python中连续方括号的用法困惑——以四子棋代码为例
关于二维数组连续方括号的解释与代码修正
连续方括号board[row][col]的作用
你代码里的board是6行7列的二维数组(用numpy创建),连续方括号是用来精准定位数组里的单个元素:
- 第一个方括号
board[row]:取出数组中第row行的所有元素(这是一个一维数组) - 第二个方括号
[col]:从这一行的元素里,提取出第col列的那个单独元素
举个实际例子:
board[0][0]对应棋盘左上角的格子board[5][6]对应棋盘右下角的格子- 代码里
board[row][col] == piece,就是判断这个位置的元素是否等于piece(1或2,代表玩家1或2的棋子)
你代码里的关键错误
注意drop_piece函数里的写法:
def drop_piece(board, row, col, piece): board[row][col] == piece # 这里是比较运算符,不是赋值!
这里必须用赋值运算符=,改成:
def drop_piece(board, row, col, piece): board[row][col] = piece
否则调用这个函数时,棋子根本不会被放到棋盘上。
如何测试连续方括号的功能
不用纠结函数,先从基础数组操作入手测试,再结合函数验证:
1. 基础索引测试
直接在代码里加几行测试代码:
board = create_board() # 打印初始状态的某个格子 print("初始board[0][0]的值:", board[0][0]) # 给这个格子赋值 board[0][0] = 1 # 再次打印,查看值是否变化 print("赋值后board[0][0]的值:", board[0][0])
运行后能看到值从0变成1,直观理解索引的作用。
2. 测试drop_piece函数
调用函数后打印棋盘,验证是否正确落子:
board = create_board() drop_piece(board, 2, 3, 1) # 在第2行第3列放置玩家1的棋子 print(board)
查看输出的棋盘,第2行(索引从0开始)第3列的位置应该显示为1,而非初始的0。
3. 测试is_valid_location函数
先填满某一列的底部,再验证函数返回值:
board = create_board() board[5][2] = 1 # 给第2列的底部行放棋子 print("第2列是否可落子:", is_valid_location(board, 2)) # 应返回False board[5][3] = 0 # 第3列底部为空 print("第3列是否可落子:", is_valid_location(board, 3)) # 应返回True
4. 测试get_next_open_row函数
给某几行的同一列放棋子,看函数能否找到下一个空行:
board = create_board() board[0][1] = 1 board[1][1] = 1 print("第1列的下一个空行:", get_next_open_row(board, 1)) # 应返回2
内容的提问来源于stack exchange,提问作者jwfish20
相关产品推荐
相关产品推荐

