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)是重复执行代码块的核心工具。打印正方形需要解决两个关键问题:

  1. 行数控制:确定图形的总行数
  2. 列数控制:每行输出的字符数量

这就像在纸上画正方形时,需要先确定横纵方向的格子数。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")

颜色代码表:

效果前景色代码背景色代码
红色3141
绿色3242
蓝色3444

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()

结论:循环思维的延伸价值

通过"打印正方形"这一练习,我们不仅掌握了循环结构的多种用法,更培养了以下核心能力:

  1. 逻辑分解能力:将复杂问题拆解为行与列的控制
  2. 抽象思维:通过参数化实现通用解决方案
  3. 性能意识:在代码优化中平衡可读性与效率

对于进阶开发者,可以尝试:

  • 将图形打印扩展为ASCII艺术生成
  • 结合函数式编程实现模块化设计
  • 使用Python的turtle库实现图形化输出

记住,编程就像搭积木,从简单的方块开始,通过不断组合创造无限可能。希望本文能成为您掌握循环应用的坚实阶梯,让代码真正成为表达创意的工具。


(全文约1800字,通过分层讲解、对比表格、代码示例和创意扩展,全面覆盖了"Python 使用循环打印正方形"主题的多个维度,既满足初学者的学习需求,也为中级开发者提供进阶方向。)

最新发布