如何用单个 for 循环在 Python 中打印对称星号菱形图案

2026-06-03日常编程87339

本文详解如何仅使用一个 for 循环配合 if-else 判断,生成 9 行对称的星号图案(1–5–4–1),避免嵌套循环,并修正常见范围逻辑错误。

本文详解如何仅使用一个 for 循环配合 if-else 判断,生成 9 行对称的星号图案(1–5–4–1),避免嵌套循环,并修正常见范围逻辑错误。

要实现如下对称星号图案:

*
**
***
****
*****
****
***
**
*

关键约束是:仅允许使用一个 for 循环,且必须通过 if/else 控制上下半部分的星号数量。初学者常误用 range(4, 0, -1) 这类子范围判断,但问题在于——i 是从 0 到 8 的连续整数,i in range(4, 0, -1) 永远为 False(因为 range(4, 0, -1) 生成的是 [4, 3, 2, 1],而 i 是单个整数,不能用 in 去“匹配”一个动态生成的 range 对象进行逻辑分支——更本质的问题是:该条件根本不会被满足,导致下半部分完全不执行)。

✅ 正确思路是:将 9 行分为两段——前 5 行(i = 0 到 4)递增打印,后 4 行(i = 5 到 8)递减打印。利用 i 的数值直接映射星号数量,无需依赖嵌套 range 判断。

以下是简洁、健壮、可读性强的实现:

Python 3.14.3

微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。

print("Pattern: ")
star = "*"

for i in range(9):
    if i < 5:
        print(star * (i + 1))  # i=0→1星, i=1→2星, ..., i=4→5星
    else:
        print(star * (9 - i))  # i=5→4星, i=6→3星, i=7→2星, i=8→1星

? 为什么 9 - i 能正确递减?
当 i = 5,9 - 5 = 4 → ****
当 i = 6,9 - 6 = 3 → ***
当 i = 7,9 - 7 = 2 → **
当 i = 8,9 - 8 = 1 → *
完美对应下半部分所需星号数。

⚠️ 注意事项:

  • 不要写 elif i in range(4, 0, -1) —— i 是标量,range(4,0,-1) 是迭代器,二者类型不匹配,且该条件在 i ≥ 5 时恒为 False;
  • 总行数为奇数(9)是关键:峰值在第 5 行(索引 i = 4),后半段起始索引 i = 5 需映射到 4 星,因此用 9 - i 实现线性对称;
  • 若需通用化(如支持任意奇数 n 行),可改为 for i in range(n): print('*' * (i+1 if i < (n+1)//2 else n-i))。

掌握这种“单循环 + 数学映射”的思维,不仅能解决星号图案题,更是理解循环变量与输出关系的重要一步。

本文地址:https://www.ufcn.cn/tutorials/3428645.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!