前言:本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。
一、循环嵌套
在之前我们已经使用过许多循环结构了,但数据的组织形式有些时候并不是线性的,还可能是多维的,比如说数学中的矩阵、表格、游戏棋盘等等。
那么对于一个二维的列表,我们可以理解为它是一个包含了其他列表的列表,即它的每一个元素都是一个列表。二维列表的元素可以通过两个索引来访问,一个索引访问行,一个索引访问列,例如:lists [0] [0] 表示第一行第一列的元素。
由于列表是二维的,我们想要通过一层 for 循环来实现遍历是不太现实的,这就需要使用到循环嵌套。
# 创建一个包含二维数据的二维列表,即列表的每一个元素都是一个列表
matrix = [
[1, 2, 3, 4, 5 ],
[6, 7, 8, 9, 10],
[11,12,13,14,15],
[16,17,18,19,20],
[21,22,23,24,25]
]
# 遍历二维列表
for row in matrix: # 外部循环迭代行,也就是第一行,第二行... 第n行
for item in row: # 内部循环迭代列,也就是第一列,第二列...第n列
print(item, end=" ") # 输出元素值
# 在每行结束后换行
print()
上述过程就是使用了循环嵌套,外部和内部分别控制行和列,从而通过这两个循环的嵌套,可以遍历整个二维列表。
二、利用循环嵌套解题
题目要求我们模拟打印一个正方形的框,根据题目可以联想到我们需要使用循环嵌套来控制行和列的打印,并根据当前行和列的位置来决定打印 "*"(外部边界)还是空白(内部)。于是我们考虑到使用 if - else 语句来判断位置。最终,我们可以写出如下程序:
n = int(input()) # 输入正方形的边长
# 打印正方形框
for i in range(n):
for j in range(n):
# 判断是否在边界位置,如果是,则打印 "*"
if i == 0 or i == n - 1 or j == 0 or j == n - 1:
print("*", end="")
else:
# 否则,打印空格
print(" ", end="")
# 换行到下一行输出
print()
三、两种循环嵌套展示
之前我们总共学过两种循环嵌套,分别是 while 循环和 for 循环,那么嵌套自然也有4种,但其实纯粹的 while 循环嵌套和纯粹的 for 循环嵌套往往更为常见,我们接下来就来把两种样子都展示一下。
i = 1
while i <= 5:
# 重置内部循环的计数器
j = 1
while j <= 5:
# 嵌套循环的代码
j += 1
# 下一轮循环
i += 1
for i in range(5):
for j in range(5):
if j == 2: # 当 j == 2时,跳出内层循环,但是会进行 i + 1的下一轮循环
break # 这将退出内层循环,但外层循环仍然继续执行