news 2026/10/23 6:28:42

Python 练习题:用函数绘制字符田字格

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 练习题:用函数绘制字符田字格

前言

在学习 Python 编程的过程中,遇到了一道非常经典的函数封装与循环控制练习题。题目要求如下:

题目 字符田字格绘制
编写程序,用字符方式打印输出一个简单的田字格。要求采用函数方式,以田字格宽度为参数,能够根据参数绘制任意大小的田字格。

这道题主要考察了函数的定义与调用、循环结构(for 循环)以及字符串的格式化输出。本文将详细解析如何实现这一功能。

题目分析

根据题目,我们可以想到“更大的田字格”具有以下特征:

  1. 结构组成:由水平虚线(-)、垂直虚线(|)和交叉点(+)组成。

  2. 网格结构:看起来是一个 2 × 2 的大网格(即包含 4 个小方格)。

  3. 参数化要求:函数需要接收一个“宽度”参数,这意味着每个小格子的横向宽度是可变的,而不是写死的。

逻辑拆解

我们需要绘制一个 2 × 2 的网格,假设每个小格子的宽度为width。

  1. 打印横线(Border Line):
    横线由+和-组成。
    对于每个小格子,结构是+加上width个-。
    因为有两列,所以模式重复两次,最后再加一个+。
    例如:+----+----+(假设 width=4)

  2. 打印竖线(Vertical Lines):
    竖线部分由|和空格组成。
    对于每个小格子,结构是|加上width个空格。
    同样重复两次,最后加一个|。
    这部分需要根据格子的高度(height)重复打印多次,以撑起格子的高度。

  3. 整体布局:

    <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,格子较宽。可以看到,虽然宽度变了,但田字格的结构保持完整,符合题目中“根据参数绘制任意大小”的要求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 6:27:55

让你的EPUB电子书自带查拼音功能

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 6:26:39

YimMenu 完整指南:GTA5 防崩溃菜单的功能、编译与 Lua 扩展教程

YimMenu 完整指南&#xff1a;GTA5 防崩溃菜单的功能、编译与 Lua 扩展教程 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华
网站建设 2026/10/23 6:25:45

TL431在反激电路中的原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 6:25:35

游戏API网关安全设计(进阶篇)最佳实践与踩坑记录

本文深入探讨游戏API网关安全设计&#xff08;进阶篇&#xff09;&#xff0c;涵盖背景分析、原理剖析、实战步骤、配置示例、优化建议和避坑指南。最近在处理游戏与SDK防护相关项目时&#xff0c;游戏API网关安全设计&#xff08;进阶篇&#xff09;成为团队讨论最多的话题。经…

作者头像 李华
网站建设 2026/10/23 6:23:04

SSH.NET 安装配置与排错指南:C# 远程执行与 SFTP 传输

简介&#xff1a;面向 C#/.NET 开发者及需要维护远程连接程序的运维人员&#xff0c;提供 SSH.NET 库 Renci.SshNet.dll 的更新版本&#xff0c;重点解决旧版库在连接加密级别较高的 Linux 系统&#xff08;如 openEuler 22.0.3&#xff09;时出现的握手失败、算法不兼容等问题…

作者头像 李华
网站建设 2026/10/23 6:22:35

数字传输核心技术与实战复习:编码、PCM、复用及介质选择

1. 数字传输到底在解决什么问题很多人复习计算机网络的时候&#xff0c;翻到第四章“数字传输”就开始头疼。前面第三章讲数据链路层还勉强能理解&#xff0c;到了第四章&#xff0c;什么曼彻斯特编码、差分曼彻斯特编码、NRZ、AMI、PCM、TDM、FDM……一堆缩写砸过来&#xff0…

作者头像 李华