摘要:程序的执行往往需要重复某些操作。例如:计算 1~100 的累加和、遍历所有学生成绩、或模拟物体的运动过程。这种反复执行某段语句的机制称为“循环结构”。
6.4 循环结构程序设计
程序的执行往往需要重复某些操作。例如:计算 1~100 的累加和、遍历所有学生成绩、或模拟物体的运动过程。这种反复执行某段语句的机制称为“循环结构”。
Python 提供了两种基本循环语句,while 循环和 for 循环,并配合若干控制语句(break、continue、pass、else)实现灵活的流程控制。
6.4.1 while 循环
while 循环用于在条件成立时反复执行代码,直到条件为假时终止。
它适合“次数不确定但条件明确”的循环场景。
语法结构:
语句块执行流程:
1、判断条件表达式是否为真(True);
2、若为真,执行循环体;
3、执行后回到判断处再次检测;
4、若条件为假(False),循环结束。
有三个关键要素控制着循环的正确执行:
• 初值:循环变量的起始值;
• 条件:循环的判断标准;
• 增量:更新循环变量的语句。
若缺少增量,将导致无限循环(又称“死循环”)。
例 6.4.1.1:累加求和
用 while 循环计算 1~100 的累加和。
print(f"1 + 2 + ... + 100 = {total}")1 + 2 + ... + 100 = 50506.4.2 for 循环
for 循环是一种“遍历循环”,用于依次访问可遍历结构(如 range)中的每个元素。
它更适合“次数确定”或“逐项处理”的任务。
语法结构:
语句块(1)、字符串以及列表、文件等都是。
(2)变量依次获取可迭代对象中的每个元素,直到最后一个元素后循环自动结束。不需要显式增量语句。
例 6.4.2.1:累加求和
使用 for 循环计算 1~100 的和。
运行结果:
例 6.4.2.2:凯撒加密法
对输入的英文短语进行简单加密(凯撒移位 3 位)。
print(f"加密后结果:{result}")运行结果(示例):
加密后结果:sbwkrq(1)字符串是可迭代对象,for 循环可直接依次访问每个字符。
(2)本示例用到了 、 等内置函数。
6.4.3 循环结构控制语句
循环执行过程中,有时需要提前终止、跳过本次、保留占位或在循环结束后追加操作。
Python 提供了 4 种语句(break、continue、pass、else)实现这些控制。
6.4.3.1 break
break 用于提前终止当前循环,直接跳出循环体。
例 6.4.3.1:密码验证
用户最多尝试 3 次输入密码,若正确则立即退出循环,否则提示剩余次数。
print("三次机会已用完,账号暂时锁定。")运行结果(示例):
登录成功!6.4.3.2 continue
continue 用于跳过本次循环的剩余语句,直接进入下一次判断。
例 6.4.3.2:输出奇数
输出 1~20 之间的奇数。
print(i, end=" ")运行结果:
1 3 5 7 9 11 13 15 17 196.4.3.3pass
pass 是,用于在语法上需要语句的位置暂时“占位”,让程序结构完整,但不执行任何操作。
例 6.4.3.3:测量代码耗时
模拟一个耗时操作,测量程序执行时间。
print(f"程序执行时间:{elapsed_time} 秒")运行结果(示例):
程序执行时间:0.015024299966171384 秒是 Python 标准库之一,用于处理与时间相关的操作。它既可以测量运行耗时,也可以实现延时、获取时间戳等功能。
6.4.3.4 else
循环语句可带 else,当循环未被 break 中断而正常结束时,执行 else 中的语句。
例 6.4.3.4:判断素数
判断输入的数是否为素数,若发现因子则提前结束循环。
print(f"{n} 是素数。")运行结果(示例):
17 是素数。6.4.4 循环嵌套与效率
当一个循环体中还包含另一个循环时,称为“循环嵌套”。
适用于多维数据处理或组合计算,但需注意效率问题。
要注意的是,外层循环与内层循环的总执行次数是它们的乘积,循环层数越多,执行时间通常越长。
例 6.4.4.1:九九乘法表
输出标准的九九乘法表。
i += 1运行结果(部分):
……例 6.4.4.2:百文百鸡
中国古代算术问题:用 100 文钱买了 100 只鸡。公鸡 5 文/只,母鸡 3 文/只,小鸡 1 文/3 只,三种鸡均至少 1 只。问公鸡、母鸡、小鸡各多少只?
print(f"公鸡:{cocks} 只,母鸡:{hens} 只,小鸡:{chicks} 只")运行结果:
公鸡: 12 只,母鸡: 4 只,小鸡: 84 只6.5 循环结构综合示例
例 6.5.1:猜数字游戏
让用户猜出系统随机生成的 1~100 之间的数字。
算法描述:
1、用 random.randint(1, 100) 生成目标数;
2、循环读取用户输入;
3、判断大小给提示;
4、猜中则 break 并输出次数。
print("太大了!")运行结果(示例):
是 Python 的标准库之一,用于生成伪随机数。它常用于游戏、抽样、模拟实验等场景。
例 6.5.2:圆周率计算
方法一:BBP 公式法
使用 Bailey–Borwein–Plouffe 公式计算 π。
算法描述:
1、根据 BBP 公式:
π = Σ (1/16^k) × [4/(8k+1) − 2/(8k+4) − 1/(8k+5) − 1/(8k+6)]2、循环累加若干项(如前 20 项);
3、输出 π 的近似值。
print(f"圆周率近似值(BBP 公式法):{pi}")方法二:蒙特卡洛法
通过随机投点模拟圆面积与方形面积的比例,估算 π 值。
算法描述:
1、随机生成大量点坐标 (x, y),范围在 [0, 1];
2、判断点是否落在单位圆内(x² + y² ≤ 1);
3、统计圆内点数与总点数的比值;
4、根据比例 π ≈ 4 × (圆内点数 / 总点数) 计算圆周率。
print(f"圆周率近似值(蒙特卡洛法):{pi}")例 6.5.3:AI 模拟训练循环
模拟神经网络权重在训练过程中的逐步收敛。
算法描述:
1、随机初始化参数 w;
2、设定学习率 α;
3、在每次循环中计算损失函数 L = (w − 0.5)²;
4、计算梯度 g = 2(w − 0.5);
5、根据更新公式 w ← w − α·g 迭代参数;
6、输出每轮训练后的权重与损失变化,观察收敛趋势。
print(f"第 {epoch} 轮:权重 = {round(w, 4)} 损失 = {round(loss, 6)}")运行结果(部分):
第 20 轮:权重 = 0.49 损失 = 0.0001小结
本次课介绍了 Python 的循环结构与控制语句:
while 循环:基于条件判断,适合未知次数的循环;
for 循环:基于遍历结构,适合顺序访问;
break、continue、pass、else:提供更灵活的循环控制;
循环嵌套:用于处理组合型问题,但需注意效率。
通过这些机制,程序可以完成重复计算、搜索、模拟和训练等任务。
下一次课将学习如何在程序出错时保持稳定运行,并掌握调试方法,让程序更健壮可靠。
“点赞有美意,赞赏是鼓励”
来源:学哥教育