一、实验目的
- 掌握 Python 的
print()输出方法,理解空格和换行对字符图形的影响。 - 掌握字符串拼接与重复运算,实现边框和格内空白的构造。
- 理解嵌套循环的执行过程,使用函数完成可调整大小的网格绘制。
二、实验环境
本次验证环境为 macOS,Python 3.12.14。
三、实验内容与原理
使用 + 表示边框交点,使用 - 表示横线,使用 | 表示竖线,使用空格填充单元格内部。基本图形由两行、两列单元格组成,形成"田"字结构;扩展示例绘制四行、四列网格。
函数参数 rows、cols 分别表示单元格的行数和列数,width 表示每个单元格内部的字符宽度,height 表示每个单元格内部的文本行数。这里的宽高均为字符单位,不是像素或实际物理长度。
横向边框的构造公式为:
text
("+" + "-" * width) * cols + "+"
格内一行的构造公式为:
text
("|" + " " * width) * cols + "|"
外层循环控制单元格行数,每轮先输出一条横向边框,再由内层循环输出指定数量的格内文本行。循环结束后补上最后一条底边,避免遗漏底部边框。
四、实验步骤
- 定义绘图函数,并检查行数、列数、格宽和格高是否为正整数。
- 根据格宽和列数构造横向边框与格内文本行。
- 使用嵌套循环逐行输出图形,最后输出底边。
- 调用默认参数,绘制两行两列的字符田字格。
- 修改参数,绘制四行四列网格,检查函数能否复用。
将同目录中的 字符田字格.py 保存后,在终端运行:
bash
python3 字符田字格.py
五、主要代码
以下为完整可运行代码,代码中未添加注释。
python
def draw_grid(rows=2, cols=2, width=5, height=3):
values = (rows, cols, width, height)
if any(type(value) is not int or value <= 0 for value in values):
raise ValueError("行数、列数、格宽和格高必须为正整数")
border = ("+" + "-" * width) * cols + "+"
content = ("|" + " " * width) * cols + "|"
for _ in range(rows):
print(border)
for _ in range(height):
print(content)
print(border)
if __name__ == "__main__":
print("示例一:2 × 2 字符田字格")
draw_grid()
print()
print("示例二:4 × 4 扩展网格")
draw_grid(4, 4, 5, 2)
六、实验结果
程序已实际运行成功,正常退出。下图根据程序实际标准输出排版生成,展示两组运行结果。

图 1:左侧为两行两列的田字格,右侧为四行四列的扩展网格。
基本田字格的实际输出如下:
text
示例一:2 × 2 字符田字格
+-----+-----+
| | |
| | |
| | |
+-----+-----+
| | |
| | |
| | |
+-----+-----+
七、结果分析
默认参数为 rows=2、cols=2、width=5、height=3。因此,图形共有三条横向边框,每个单元格内部有三行空白,总文本行数为 2 × (3 + 1) + 1 = 9,每行字符数为 2 × (5 + 1) + 1 = 13,均不包含示例标题。
扩展示例将参数设置为 4, 4, 5, 2,生成四行四列网格。图形总文本行数为 4 × (2 + 1) + 1 = 13,每行字符数为 4 × (5 + 1) + 1 = 25。从实际输出可以看到,边框完整,交点和竖线对齐,说明函数能够根据参数正确调整网格规模。
绘制时需注意:横向边框和格内文本行都要补上最右侧字符,外层循环结束后要补上底边。由于终端字符通常高于其宽度,字符数量相同不代表显示长度相同,可通过调整 width 和 height 改善单元格的视觉比例。
八、实验总结
本实验利用字符串重复、字符串拼接和嵌套循环,完成了字符田字格及扩展网格的绘制。将重复输出过程封装为函数后,只需修改参数即可改变网格大小。实验说明,规则字符图形可以分解为少量重复行,再通过循环组合得到,从而减少重复代码并提高可读性。