循环嵌套与图形打印
中等3循环嵌套:用代码画出有趣的图形
同学们,你们有没有想过,用代码也能像画画一样,在屏幕上打印出各种图形?比如一个由星星组成的正方形、三角形,甚至还能画出菱形和数字图案。这就需要用到一个神奇的方法——循环嵌套。
循环嵌套就像是一个“套娃”:外面有一个大循环(比如控制行数),里面还有一个小循环(比如控制每行打印几个符号)。你可以想象成排队做操:外层循环控制你站在第几排,内层循环控制这一排里有多少个同学。通过调整内层循环的次数,我们就能画出不同形状的图案。
什么是循环嵌套?
循环嵌套就是一个循环里面再放一个循环。执行时,外层循环每执行一次,内层循环就要完整地执行一遍(从开头跑到结尾)。比如:
for 外层变量 in range(行数): # 外层:控制行
for 内层变量 in range(每行个数): # 内层:控制这一行的元素
打印某个符号(不换行)
换行 # 内层循环结束后,换到下一行
生活中也有类似例子:你每周有5天上学(外层循环),每天有6节课(内层循环)。每过一天,就要上完6节课;上完一节课,接着上下一节,直到这天结束。
1. 用循环嵌套打印一个正方形
正方形的特点是:行数和每行的星号数量相等。比如4行4列,每行4个星号。
rows = 4 # 正方形边长
for i in range(rows): # 外层循环,控制行数,共4行
for j in range(rows): # 内层循环,每行打印 rows 个星号
print('*', end='') # 打印星号,不换行(end=''表示不自动换行)
print() # 一行结束后换行
运行结果:
****
****
****
****
为什么用
end=''?
默认print()打印完后会自动换行。如果连用print('*')就会变成一列竖着的星星。加上end=''后,星号会紧挨着打印,等到一整行打印完,再单独用一个print()换行。
2. 用循环嵌套打印直角三角形
直角三角形的特点是:第1行1个星号,第2行2个星号……第n行n个星号。所以内层循环的次数取决于外层变量 i。
rows = 5 # 三角形的高度
for i in range(1, rows + 1): # 外层循环,i从1到5(第1行、第2行……)
for j in range(i): # 内层循环,打印 i 个星号(第i行打印i个)
print('*', end='')
print() # 换行
结果:
*
**
***
****
*****
思考:如果把
range(1, rows + 1)改成range(rows),i 会从0开始,那第0行就会打印0个星号(空行),第1行1个……这样也能得到同样的图形,但要注意i的含义。
3. 调整内层循环条件,画出更多图形
掌握了外层控制行、内层控制列的基本思路,你只需改变内层循环的范围,就能画出各种图案。
倒三角形:第1行5个星号,第2行4个……最后1行1个。可以利用 rows - i 来计算出每行星号的个数。
rows = 5
for i in range(rows): # i从0到4
for j in range(rows - i): # 第i行打印 rows-i 个星号
print('*', end='')
print()
结果:
*****
****
***
**
*
数字直角三角形:每行打印递增的数字,而不是星号。
rows = 4
for i in range(1, rows + 1): # 外层行数
for j in range(1, i + 1): # 内层打印1到i的数字
print(j, end='')
print()
结果:
1
12
123
1234
你也可以用 print(chr(65 + j - 1), end='') 打印字母三角形(A、AB、ABC……)。发挥想象力,循环嵌套能做出很多有趣的图案。
常见错误(新手容易踩的坑)
-
忘记换行
内层循环结束后没有加print(),所有星号会直接连成一行。
❌ 错误代码:for i in range(4): for j in range(4): print('*', end='') # 没有 print() 换行,结果:****************(16个星号排成一行) -
内层循环的 range 写成了固定值
比如打印直角三角形时,内层循环写成for j in range(5),结果每行都是5个星号,变成正方形。
✅ 正确做法:内层循环次数依赖外层变量,如range(i)或range(rows - i)。 -
混淆行和列的变量
外层变量通常控制行数,内层变量控制列数。如果用反了(比如把行数当作内层循环次数),图形就会变形。 -
忘记缩进
Python 中缩进表示代码的归属。内层循环必须比外层循环多一层缩进(通常是4个空格或一个Tab),不然会报错或逻辑错误。
完整示例:用循环嵌套打印一个菱形
菱形可以看成两个三角形(上半部分 + 下半部分),但中间一行共用。下面是一个由星号组成的菱形(行数取奇数,例如7行)。
rows = 7 # 总行数(奇数)
mid = rows // 2 # 中间行的索引(0开始,7行中间是第3行)
# 上半部分(包含中间行)
for i in range(mid + 1): # i从0到3
# 先打印空格,让星号居中
for j in range(mid - i): # 空格数 = 中间行数 - 当前行数
print(' ', end='')
# 再打印星号,每行星号数 = 2*i + 1
for j in range(2 * i + 1):
print('*', end='')
print() # 换行
# 下半部分(不包含中间行)
for i in range(mid - 1, -1, -1): # i从2到0倒序
for j in range(mid - i):
print(' ', end='')
for j in range(2 * i + 1):
print('*', end='')
print()
运行结果(7行菱形):
*
***
*****
*******
*****
***
*
这段代码中,外层循环控制行,内层循环先打空格(让图案居中),再打星号。你可以调整 rows 为其他奇数(如5、9),观察图形变化。
相关指引
学会循环嵌套后,你可以尝试:
- 打印九九乘法表:经典的嵌套循环应用,内层循环上限 = 外层变量。
- 处理二维数据:比如用嵌套循环遍历一个 Excel 表格的行和列,或处理图像像素。
- 嵌套条件语句:在循环内部结合
if判断,比如只打印偶数行星号,或打印棋盘格。 - 结合列表:用嵌套循环创建二维列表(如游戏地图、矩阵)。
循环嵌套是编程中非常重要的基本功,它让代码拥有了“重复中的重复”的能力。多动手画几个图案,你会越来越熟练,以后遇到更复杂的问题也能轻松拆解。现在,打开你的 Python 编辑器,试试画出自己的图案吧!
例题精讲
使用循环嵌套打印一个4行4列的正方形(每个星号之间有一个空格),以下哪段代码是正确的?
在使用嵌套循环打印图形时,外层循环通常控制行数,内层循环通常控制每行的具体内容。
以下代码用于打印一个5行的直角三角形(直角在左下角),请补充完整。
for i in range(5):
for j in range(___):
print('*', end='')
print()给定以下代码,输出的图形是? for i in range(3): for j in range(3): print('*', end='') print()
打印一个直角三角形(直角在右上角)时,内层循环的次数应随着行号增加而减少。