You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用Numpy生成指定规格的棋盘格二维数组?

原生Python实现棋盘格生成函数chequerboard

问题描述

需要实现一个原生Python函数chequerboard(n, m, offset_h, offset_w),所有参数均≥1,返回一个n行m列的二维数组,满足以下规则:

  • 每个棋盘区块大小为offset_h行 × offset_w列
  • 左上角单元格始终为填充状态('#')
  • 仅右侧和底部边缘允许存在不完整的棋盘区块

示例输出:

# 示例1:chequerboard(6, 8, 2, 2)
[['#', '#', ' ', ' ', '#', '#', ' ', ' '],
 ['#', '#', ' ', ' ', '#', '#', ' ', ' '],
 [' ', ' ', '#', '#', ' ', ' ', '#', '#'],
 [' ', ' ', '#', '#', ' ', ' ', '#', '#'],
 ['#', '#', ' ', ' ', '#', '#', ' ', ' '],
 ['#', '#', ' ', ' ', '#', '#', ' ', ' ']]

# 示例2:chequerboard(5, 7, 2, 3)
[['#', '#', '#', ' ', ' ', ' ', '#'],
 ['#', '#', '#', ' ', ' ', ' ', '#'],
 [' ', ' ', ' ', '#', '#', '#', ' '],
 [' ', ' ', ' ', '#', '#', '#', ' '],
 ['#', '#', '#', ' ', ' ', ' ', '#']]

实现思路

核心逻辑是通过单元格的行列索引判断其所属的区块组:

  • 对第i行(从0开始计数),计算横向区块编号:block_row = i // offset_h
  • 对第j列(从0开始计数),计算纵向区块编号:block_col = j // offset_w
  • 若block_row + block_col为偶数,该单元格属于与左上角同色的区块(填充'#');若为奇数,则填充空格' '

此逻辑自动兼容边缘的不完整区块,因为整数除法//会将剩余行/列归入最近的区块组。

代码实现

def chequerboard(n, m, offset_h, offset_w):
    board = []
    for i in range(n):
        current_row = []
        block_row = i // offset_h
        for j in range(m):
            block_col = j // offset_w
            current_row.append('#' if (block_row + block_col) % 2 == 0 else ' ')
        board.append(current_row)
    return board

验证示例

运行示例1代码:

result = chequerboard(6, 8, 2, 2)
for row in result:
    print(row)

输出与题目示例完全一致。

运行示例2代码:

result = chequerboard(5, 7, 2, 3)
for row in result:
    print(row)

同样符合预期输出。

内容的提问来源于stack exchange,提问作者user9493162

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:50:25