当前位置:首页>python>Python 番外篇-写嵌套循环卡到自我怀疑时,一句话点醒了我

Python 番外篇-写嵌套循环卡到自我怀疑时,一句话点醒了我

  • 2026-09-02 15:55:59
Python 番外篇-写嵌套循环卡到自我怀疑时,一句话点醒了我

前几天对着嵌套循环代码死磕,怎么写都理不清内外层逻辑,越写越烦躁,甚至忍不住暗自怀疑:是不是我脑子不够灵光,记忆力退化,天生就学不会这种双层循环?

身边人轻飘飘说了句:“人笨点开心,这样就不会因为记得自己学不会而不开心。”听完我瞬间醍醐灌顶。

我在想有没有一种可能不是我太笨,而是我把python 想的太聪明了?

静下心来,我把这段打印三角形的嵌套循环逐行拆开,一点点理顺每一步的运行逻辑,分享给同样卡在循环的朋友:

整个代码

  1. 这个东西不能逐行解读,只能逐框说
  2. 一、先吃透【外层 while 循环】(管整体:一共打 5 行)

    1. row = 1

    row 是外层专属计数器,代表「当前正在打印第几行」,我们从第 1 行开始。

    2. while row <= 5:

    外层循环的总规则:只要当前行数不超过 5,就完整执行一整行的打印工作。逻辑大白话:我们要打印 5 行三角形,所以行数 1、2、3、4、5 全都要执行一遍;等到 row 变成 6,直接结束整个程序。

    3. 外层循环内部包含 3 件事(缩进里全部属于外层管辖)

    1. 重置内层计数器:col = 1
    2. 完整跑完一整个内层循环,打出当前行所有星星
    3. print()
       换行,切换到下一行
    4. row += 1
       行数 + 1,准备打印下一行

    4. row += 1

    外层收尾关键:打完一行,行数加 1。如果没有这行,row 永远 = 1,外层条件永久成立,程序死循环不停打印。

    外层核心总结

    外层只管「行」,每执行一次外层,就完整生成一整行图案;外层一共循环 5 次,对应三角形 5 行。(只有外循环得话如下图)

二、再钻进【内层 while 循环】(管单行:这一行打几颗星)

内层代码是被包裹在外层缩进里的,外层每走一轮,内层就要从头到尾完整跑一遍。

1. col = 1

这行写在内层循环上方、外层循环内部,是嵌套循环的灵魂:每新开一行(外层走一轮),都要把 col 重置回 1,保证每行的星星都从第 1 颗开始打印。

2. while col <= row:

内层判断规则:当前是第几行,这一行就打印几颗星

  • 外层 row=1(第 1 行):col 只能≤1 → 只打印 1 颗星
  • 外层 row=2(第 2 行):col≤2 → 打印 2 颗星
  • 外层 row=5(第 5 行):col≤5 → 打印 5 颗星

3. print("*", end="")

打印星号,end="" 取消 print 自带的换行,让星星横向并排,不会打一颗就跳去下一行。

4. col += 1

内层计数器自增,打完一颗星,准备打下一颗;缺少这行会无限打印星星。

内层退出时机

当 col 的数字超过当前行号 row,内层循环直接结束,代表当前这一行所有星星全部打印完毕。


三、内外层衔接关键:print() 换行语句

内层全部跑完后,立刻执行 print():因为内层打印星星时关掉了自动换行,所有星星都挤在同一行;空 print() 单独触发一次换行,让光标跳到下一行最左侧,外层再进入下一轮、打印新一行星星。

如果删掉这行 print(),5 行星星会全部挤成一条长线,三角形直接消失。


四、完整一轮内外层联动演示(row=1,第一行)

  1. 外层启动:row=1,满足row<=5,进入外层内部
  2. 重置内层:col=1
  3. 进入内层循环:col<=1 成立
    • 打印*,不换行
    • col 变成 2
  4. 再次判断内层:2<=1不成立,内层彻底退出
  5. 执行print()换行,第一行图案完成
  6. row +=1,row 变成 2,外层开启第二轮,打印第二行
 这么看来AI干起活来也是笨笨的

最新文章

随机文章