字符田字格绘制

一、实验目的

  1. 掌握 Python 的 print() 输出方法,理解空格和换行对字符图形的影响。
  2. 掌握字符串拼接与重复运算,实现边框和格内空白的构造。
  3. 理解嵌套循环的执行过程,使用函数完成可调整大小的网格绘制。

二、实验环境

本次验证环境为 macOS,Python 3.12.14。

三、实验内容与原理

使用 + 表示边框交点,使用 - 表示横线,使用 | 表示竖线,使用空格填充单元格内部。基本图形由两行、两列单元格组成,形成"田"字结构;扩展示例绘制四行、四列网格。

函数参数 rows、cols 分别表示单元格的行数和列数,width 表示每个单元格内部的字符宽度,height 表示每个单元格内部的文本行数。这里的宽高均为字符单位,不是像素或实际物理长度。

横向边框的构造公式为:

text 复制代码
("+" + "-" * width) * cols + "+"

格内一行的构造公式为:

text 复制代码
("|" + " " * width) * cols + "|"

外层循环控制单元格行数,每轮先输出一条横向边框,再由内层循环输出指定数量的格内文本行。循环结束后补上最后一条底边,避免遗漏底部边框。

四、实验步骤

  1. 定义绘图函数,并检查行数、列数、格宽和格高是否为正整数。
  2. 根据格宽和列数构造横向边框与格内文本行。
  3. 使用嵌套循环逐行输出图形,最后输出底边。
  4. 调用默认参数,绘制两行两列的字符田字格。
  5. 修改参数,绘制四行四列网格,检查函数能否复用。

将同目录中的 字符田字格.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 改善单元格的视觉比例。

八、实验总结

本实验利用字符串重复、字符串拼接和嵌套循环,完成了字符田字格及扩展网格的绘制。将重复输出过程封装为函数后,只需修改参数即可改变网格大小。实验说明,规则字符图形可以分解为少量重复行,再通过循环组合得到,从而减少重复代码并提高可读性。

相关推荐
SEO_juper1 小时前
手写 llms.txt 验证器:让 AI 更愿意引用你的网站(GEO)
开发语言·人工智能·python·聚类·seo·独立站
小小张说故事1 小时前
Python 的 list append 为什么是均摊 O(1)?拆开过度分配那张表,看容量翻倍背后的暗账
python
benjiangliu1 小时前
恩培趣味计算机视觉-01-conda环境和Python库
开发语言·python·conda
ZhengEnCi1 小时前
用 YOLOv8n + 自研二分类模型做课堂行为识别:从 9000 张标注数据到 Flask 全栈落地
pytorch·python·计算机视觉
成为深度学习高手1 小时前
xLSTM-Mixer:用标量记忆同时混合时间与变量,把循环网络带回多元时序预测
人工智能·python·深度学习·数据挖掘·transformer
骑士雄师2 小时前
多轮对话流程梳理详细版本
python
进击的明明15 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿16 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境17 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python