前言
在学习 Python 编程的过程中,遇到了一道非常经典的函数封装与循环控制练习题。题目要求如下:
题目 字符田字格绘制
编写程序,用字符方式打印输出一个简单的田字格。要求采用函数方式,以田字格宽度为参数,能够根据参数绘制任意大小的田字格。
这道题主要考察了函数的定义与调用、循环结构(for 循环)以及字符串的格式化输出。本文将详细解析如何实现这一功能。
题目分析
根据题目,我们可以想到“更大的田字格”具有以下特征:
结构组成:由水平虚线(
-)、垂直虚线(|)和交叉点(+)组成。网格结构:看起来是一个 2 × 2 的大网格(即包含 4 个小方格)。
参数化要求:函数需要接收一个“宽度”参数,这意味着每个小格子的横向宽度是可变的,而不是写死的。
逻辑拆解
我们需要绘制一个 2 × 2 的网格,假设每个小格子的宽度为width。
打印横线(Border Line):
横线由+和-组成。
对于每个小格子,结构是+加上width个-。
因为有两列,所以模式重复两次,最后再加一个+。
例如:+----+----+(假设 width=4)打印竖线(Vertical Lines):
竖线部分由|和空格组成。
对于每个小格子,结构是|加上width个空格。
同样重复两次,最后加一个|。
这部分需要根据格子的高度(height)重复打印多次,以撑起格子的高度。整体布局:
<ul> <li> <p>打印第一行横线</p> </li> <li> <p>打印若干行竖线(以及中间的空白)</p> </li> <li> <p>打印第二行横线(中间的分隔线)</p> </li> <li> <p>打印若干行竖线</p> </li> <li> <p>打印第三行横线(底部的封口线)</p> </li> </ul> </li>
Python 代码实现
下面是根据上述逻辑编写的 Python 代码。为了让田字格看起来更方正,我设定格子的高度与宽度参数相关(或者固定一个合适的高度)。
def draw_grid(width): """ 绘制字符田字格 :param width: 每个小格子的宽度(字符数) """ # 为了美观,我们可以设定格子的高度,这里假设高度与宽度有一定比例 # 或者固定一个高度,比如 2 行空格 height = 2 # 定义三种线条的样式 # 1. 横向分割线,例如: +----+----+ line_horiz = ("+" + "-" * width) * 2 + "+" 2. 纵向内容行,例如: | | | line_vert = ("|" + " " * width) * 2 + "|" --- 开始绘制 --- 第一部分:顶部横线 print(line_horiz) 第二部分:上半部分内容 + 中间横线 循环打印 height 次竖线行 for _ in range(height): print(line_vert) 中间的分隔横线 print(line_horiz) 第三部分:下半部分内容 + 底部横线 再次循环打印 height 次竖线行 for _ in range(height): print(line_vert) 底部的封口横线 print(line_horiz) --- 主程序调用 --- if name == "main": 设定宽度参数,例如 4 w = 4 print(f"--- 绘制宽度为 {w} 的田字格 ---") draw_grid(w) print("\n") # 换行分隔 测试另一个宽度,例如 8 w2 = 8 print(f"--- 绘制宽度为 {w2} 的田字格 ---") draw_grid(w2)</code></pre> 代码详解 line_horiz 的生成: ("+" + "-" * width) * 2 + "+" 这里利用了字符串乘法。如果 width=4,"-" * 4 得到 "----"。"+" + "----" 得到 "+----"。乘以 2 得到 "+----+----",最后补上最右边的 +,形成完整的 +----+----+。 line_vert 的生成: 同理,"|" + " " * width 生成了 |,重复并拼接后得到 | | |。 循环控制: 为了体现“田”字的效果,我们需要在两个横线之间打印竖线。这里用了两个 for 循环,分别控制上半部分和下半部分的格子高度。height 变量决定了格子的纵向拉伸程度。 运行结果 截图说明: 运行上述代码后,控制台将输出两个不同宽度的田字格。第一个宽度为 4,格子较窄;第二个宽度为 8,格子较宽。可以看到,虽然宽度变了,但田字格的结构保持完美,符合题目中“根据参数绘制任意大小”的要求。 总结 这道题是练习 Python 基础语法的绝佳案例。通过将重复的图形拆解为“线条生成”和“循环打印”两个步骤,我们不仅解决了问题,还学会了如何编写可复用、可配置的函数。这种思维方式在后续学习更复杂的图形界面编程或游戏开发时同样适用。运行结果
下面分别给出width=4和width=8两种参数下控制台的实际输出。
width = 4
--- 绘制宽度为 4 的田字格 --- +----+----+ | | | | | | +----+----+ | | | | | | +----+----+width = 8
--- 绘制宽度为 8 的田字格 --- +--------+--------+ | | | | | | +--------+--------+ | | | | | | +--------+--------+输出说明:
两种宽度下,田字格都由三条横线和两组竖线行组成,结构完全一致,只是每个小格子的横向宽度随width变化。第一个宽度为 4,格子较窄;第二个宽度为 8,格子较宽。可以看到,虽然宽度变了,但田字格的结构保持完整,符合题目中“根据参数绘制任意大小”的要求。