二维数组或嵌套列表可模拟画布,通过初始化、坐标修改、双层循环打印及条件渲染实现算法绘图,封装为函数或类后支持交互式重绘。

用二维数组或嵌套列表模拟画布,本质是把画布抽象成「行 × 列」的网格,每个单元格存一个字符(如空格、星号、颜色码等),再通过流程控制逐行输出——关键不在数据结构本身,而在如何组织遍历与条件渲染。
用嵌套列表构建可编辑画布
先创建一个固定尺寸的二维容器,用统一字符(比如空格)初始化,后续可按坐标修改内容:
- 例如建一个 5 行 8 列的空白画布:
canvas = [[' ' for _ in range(8)] for _ in range(5)] - 这样得到的是 5 个独立子列表,避免浅拷贝陷阱(不用
[[' '] * 8] * 5) - 想在第 2 行第 3 列画一个
X,就写canvas[1][2] = 'X'(注意索引从 0 开始)
用双层 for 循环逐行打印
打印时外层遍历行,内层拼接该行所有字符,再统一输出——这是最清晰、最可控的方式:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
-
for row in canvas:
print(''.join(row)) - 如果希望列对齐(尤其含中文或不同宽字符),可用固定宽度格式化:
print(''.join(f'{c:^3}' for c in row)) - 不推荐直接
print(row),那会输出带括号和引号的列表形式,不是视觉画布
结合条件逻辑动态生成图案
在遍历时加入 if 判断,就能实现“算法绘图”,比如画实心三角形、棋盘格、十字线:
- 画一个顶点朝上的等腰三角形(高 4):
对第i行(0 起),中心列是mid = 3,左右扩展i格 → 填充范围[mid-i, mid+i] - 画棋盘格:判断
(i + j) % 2 == 0决定填█还是空格 - 画坐标轴:当
i == height//2或j == width//2时输出'+'或'-'/'|'
进阶:支持简单交互与重绘
把画布封装成函数或类,配合 while 循环可实现简易终端绘图器:
- 每次修改后调用统一的
draw(canvas)函数刷新屏幕 - 用
os.system('cls')(Windows)或os.system('clear')(macOS/Linux)清屏,避免历史残留 - 接收用户输入坐标和符号,更新对应位置,再重绘——这就是最小可行画布系统










