Python 使用循环打印正方形(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
引言:为什么需要掌握循环打印图形?
在编程学习的初期阶段,"打印正方形"是一个看似简单却蕴含丰富知识点的练习。它不仅是对循环结构的直观应用,更能让开发者理解如何通过代码控制输出的格式和逻辑。对于初学者而言,这像是搭建编程思维的"积木游戏";对于中级开发者,它又能延伸出对算法效率、代码复用性等更深层次的思考。本文将通过循序渐进的讲解,带您从基础语法到创意实现,全面掌握这一经典编程任务。
第一部分:基础概念解析
1.1 循环结构的核心作用
在Python中,循环(Loop)是重复执行代码块的核心工具。打印正方形需要解决两个关键问题:
- 行数控制:确定图形的总行数
- 列数控制:每行输出的字符数量
这就像在纸上画正方形时,需要先确定横纵方向的格子数。Python的for
循环和while
循环都能实现这一目标,但各有适用场景。
示例:用for
循环打印简单图形
for i in range(3):
print("*")
输出结果:
*
*
*
1.2 嵌套循环的"坐标系"思维
要形成二维图形,需要引入嵌套循环:外层循环控制行数,内层循环控制每行的字符数量。这类似于在坐标系中逐行绘制:
size = 3
for row in range(size):
for col in range(size):
print("*", end="") # end参数控制不换行
print() # 每行结束后换行
输出结果:
***
***
***
关键点解析:
end=""
:默认print()
会换行,这里改为不换行- 内层循环次数等于外层循环次数时,才能保证每行字符数量一致
- 最后单独的
print()
用于换行到下一行
第二部分:经典实现方法详解
2.1 固定大小的正方形
当已知正方形边长时,最基础的实现方法是:
def print_square(size):
for _ in range(size):
print("*" * size)
优化技巧:
- 字符串乘法
"*" * size
比循环拼接更高效 - 使用
_
作为循环变量表示该变量不被使用
案例演示:
print_square(5)
输出:
*****
*****
*****
*****
*****
2.2 动态参数的灵活处理
当需要根据用户输入调整大小时:
try:
n = int(input("请输入正方形边长:"))
if n <= 0:
print("请输入正整数")
else:
print_square(n)
except ValueError:
print("输入无效,请输入数字")
2.3 带边框的空心正方形
进阶需求:只显示边框的正方形:
def print_hollow_square(size):
for row in range(size):
if row == 0 or row == size-1:
print("*" * size)
else:
print("*" + " "*(size-2) + "*")
输出效果(当size=4时):
****
* *
* *
****
知识点拓展:
- 条件判断
if row in [0, size-1]
处理首尾行 - 中间行通过
" "*(size-2)
创造空心区域 - 字符串拼接技巧:
"*" + "..." + "*"
第三部分:循环结构的多样化实现
3.1 使用while
循环的替代方案
虽然for
循环更简洁,但while
循环能提供更多控制:
def while_square(size):
row = 0
while row < size:
col = 0
while col < size:
print("*", end="")
col += 1
print()
row += 1
对比分析:
特点 | for循环优点 | while循环优点 |
---|---|---|
可读性 | 更直观,适合固定次数循环 | 需要手动维护计数器 |
灵活性 | 适合已知迭代次数的情况 | 可处理动态终止条件 |
3.2 多层循环的效率优化
当需要打印大尺寸图形时,代码效率开始显现:
result = ""
for _ in range(1000):
result += "*"
print(result)
parts = []
for _ in range(1000):
parts.append("*")
print("".join(parts))
性能差异说明:
- 字符串是不可变对象,每次
+=
会生成新对象 - 列表的
append()
操作时间复杂度更低
第四部分:创意扩展与高级应用
4.1 彩色正方形的实现
通过ANSI转义序列添加颜色:
def color_square(size, color_code):
for _ in range(size):
print(f"\033[{color_code}m{'*' * size}\033[0m")
color_square(5, "31")
颜色代码表:
效果 | 前景色代码 | 背景色代码 |
---|---|---|
红色 | 31 | 41 |
绿色 | 32 | 42 |
蓝色 | 34 | 44 |
4.2 动态渐变效果
通过循环改变符号实现视觉效果:
for i in range(5, 0, -1):
print(" " * (5 - i) + "*" * (2*i -1))
输出效果:
*
***
*****
*******
*********
4.3 多维扩展:立方体打印
虽然控制台无法显示三维图形,但可以尝试二维投影:
def cube_projection(size):
for i in range(size):
print(" " * (size - i -1) + "*" * (2*i+1))
for i in range(size-2, -1, -1):
print(" " * (size - i -1) + "*" * (2*i+1))
输出效果(size=3时):
*
***
*****
***
*
第五部分:常见问题与调试技巧
5.1 图形变形的典型原因
- 列数计算错误:内层循环次数与外层不匹配
- 换行控制失误:忘记
print()
的换行机制 - 边界条件漏判:空心图形的首尾行处理
调试案例:
for row in range(5):
for col in range(row):
print("*", end="")
print()
预期是5行,但实际输出只有4行,因为当row=0时col不会执行。
5.2 单元测试的实践
通过断言验证输出:
def test_print_square():
expected = "****\n****\n****\n****"
assert print_square(4).strip() == expected.strip()
test_print_square()
结论:循环思维的延伸价值
通过"打印正方形"这一练习,我们不仅掌握了循环结构的多种用法,更培养了以下核心能力:
- 逻辑分解能力:将复杂问题拆解为行与列的控制
- 抽象思维:通过参数化实现通用解决方案
- 性能意识:在代码优化中平衡可读性与效率
对于进阶开发者,可以尝试:
- 将图形打印扩展为ASCII艺术生成
- 结合函数式编程实现模块化设计
- 使用Python的
turtle
库实现图形化输出
记住,编程就像搭积木,从简单的方块开始,通过不断组合创造无限可能。希望本文能成为您掌握循环应用的坚实阶梯,让代码真正成为表达创意的工具。
(全文约1800字,通过分层讲解、对比表格、代码示例和创意扩展,全面覆盖了"Python 使用循环打印正方形"主题的多个维度,既满足初学者的学习需求,也为中级开发者提供进阶方向。)