
本文详解如何通过调整嵌套for循环的range参数与条件逻辑,正确输出两行“3, 2, 1”,重点讲解range边界含义、倒序构造技巧及print换行控制。
本文详解如何通过调整嵌套for循环的range参数与条件逻辑,正确输出两行“3, 2, 1”,重点讲解range边界含义、倒序构造技巧及print换行控制。
要生成如下目标输出:
3, 2, 1 3, 2, 1
关键在于理解 range() 的行为,并合理设计内外层循环与打印逻辑。
? 问题剖析
原代码存在三处核心误解:
- range(1, 3) 生成 [1, 2](共2个数),但我们需要3个数字(3、2、1)→ 应改为 range(3)(生成 0, 1, 2);
- i 仅用于控制行数(需2行),其值本身不参与输出,真正输出的是固定递减序列 3, 2, 1;
- if j != 0 错误判断了换行时机:应让前两个元素后接 ", " 并不换行,最后一个元素才换行。
✅ 正确解法(推荐)
for i in range(1, 3): # 外层:控制打印2行
for j in range(3): # 内层:j 取 0, 1, 2 → 3-j 得 3, 2, 1
if j != 2: # 前两项(j=0,1)后加 ", " 且不换行
print(str(3 - j) + ", ", end="")
else: # 最后一项(j=2)单独打印并自动换行
print(str(3 - j))
? 关键要点说明
- range(3) ≠ range(1, 3):前者生成 0, 1, 2(长度3),后者仅生成 1, 2(长度2);这是实现3个数字输出的基础。
- 倒序无需 reversed() 或负步长:利用 3 - j(当 j 为 0→2 时,结果为 3→1)简洁高效。
- 精准控制换行:使用 end="" 避免默认换行,仅在最后一项用普通 print() 触发换行;注意 end=" " 会多出尾部空格,不符合目标格式。
- i 的作用仅限行计数:题目未要求动态变化内容,因此 i 不参与字符串拼接——这是初学者易陷入的思维定式。
? 常见误区提醒
- ❌ 修改外层 range(3, 4) 只能得1行,无法满足2行需求;
- ❌ 保留 str(i) 会导致输出 1,1/1,2 等错误组合;
- ❌ if j == 0 或 j != 0 无法区分“是否为末尾项”,必须基于索引位置(如 j != 2)或使用 j == len(range)-1。
运行上述修正代码,即可稳定输出两行完全一致的 3, 2, 1,精准匹配题目要求。掌握 range 的左闭右开特性与 print(..., end=...) 的协同控制,是驾驭Python循环输出的关键基础。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











