内容正文:
任务2:使用循环结构
中职信息技术(下册) · 第5单元 程序设计入门
1.7.2013
大家好!今天我们来学习程序设计中另一个非常重要的结构——循环结构。它能帮助我们高效地处理重复的任务,让程序变得更强大、更优雅。
‹#›
思考一个场景:为什么需要循环?
方法A:机械的逐个检查
面对全班50位同学的作业,你需要手动执行50次“检查第1位”“检查第2位”……直到“检查第50位”。
如果用代码实现,这意味着要写50行几乎完全重复的指令。试想若班级有1000个学生,代码量将极度冗余,不仅开发效率低下,后续维护也将是一场灾难。
方法B:聪明的规则化处理
制定一个通用规则:“从第1位同学开始,只要队列中还有未检查的同学,就自动执行‘检查下一位’的动作。”
无论班级人数是50还是1000,核心逻辑始终只有这一句。流程由规则自动推进,无需人工干预重复操作,用极简的逻辑应对无限的重复。
有没有更高效、更简洁的方法来解决这类重复执行的问题?
答案是肯定的 —— 这就是编程中核心的循环结构!它就像自动化的流水线,让程序用少量代码完成大量重复性工作,不仅解放了开发者的双手,更是构建复杂逻辑、提升运行效率的关键工具。
1.7.2013
我们先来看一个场景。如果要检查50个同学的作业,是写50行重复的代码,还是用一个更聪明的方法?显然,重复的代码既低效又难以维护。这就是我们需要循环结构的原因。
‹#›
手动代码 vs 循环代码
手动实现(重复冗余)
print("Hello, World!")
print("Hello, World!")
print("Hello, World!")
print("Hello, World!")
print("Hello, World!")
核心痛点:代码机械重复,若需修改内容或调整执行次数(如改为100次),需逐行编辑,不仅效率低下,还极易在重复操作中引入人为错误。
循环实现(简洁高效)
# 用循环抽象重复逻辑
for i in range(5):
print("Hello, World!")
核心优势:逻辑与执行分离,只需定义一次规则即可无限复用。修改执行次数仅需调整数字,维护成本极低,且能轻松应对大规模的重复任务需求。
💡 核心洞察:循环结构是解决重复性操作的终极“利器”。它将程序员从繁琐的机械劳动中解放出来,让代码从低效的“量变堆砌”升级为优雅的“逻辑质变”,是实现自动化流程与高效编程的基础思维模式。
1.7.2013
大家看这个例子,要打印5次“Hello, World!”,左边是手动写5行代码,右边是用一行循环代码搞定。如果要打印100次,左边就要复制粘贴95次,而右边只需要把数字5改成100。这就是循环的力量。
‹#›
新知讲解:什么是循环结构?
循环结构是程序设计的三种基本结构之一。它允许程序在满足特定条件时,重复执行一段代码(称为“循环体”),从而减少重复书写代码的工作量,让程序逻辑更简洁高效。
核心思想:重复执行,直到条件不满足为止
这就像生活中许多周而复始的现象,在没有达到终止信号前,动作会一直持续进行。
呼吸律动
我们无时无刻不在进行的吸气与呼气,这是一个天然的无限循环过程。除非生命终止(条件不满足),否则这个动作会一直持续下去。
生命节拍
心脏有规律的收缩与舒张,每一次跳动都是一次完整的循环。它按照固定的频率运行,是生物体内精准且强大的循环执行器。
规律提醒
设定好的闹钟每天清晨在固定时间响起。这是典型的条件循环:时间未到则等待,时间满足则触发提醒,周而复始直到被关闭。
1.7.2013
那么,什么是循环结构呢?简单来说,就是让程序重复执行一段代码,直到某个条件不满足为止。就像我们的心跳、呼吸,还有每天早上响起的闹钟,都是生活中的循环。
‹#›
循环结构的两种基本类型
while 循环
核心特点:条件驱动的先验判断
先对条件表达式进行布尔判断,若结果为真(True)则执行循环体代码块。直到条件变为假(False)时,才会终止循环。这是一种“先判断,后执行”的逻辑。
适用场景:未知的循环次数
当你在编写代码时,不确定具体需要循环多少次,或者循环的终止取决于某个在运行过程中动态变化的条件(如用户输入、数据状态改变)时,优先选择 while 循环。
for 循环
核心特点:遍历序列与次数可控
基于可迭代对象(如列表、字符串、范围 range)进行遍历。它会依次取出对象中的每个元素,并执行循环体,直到所有元素处理完毕,是 Python 中更常用的遍历方式。
适用场景:明确的执行次数
当你在代码逻辑中明确知道需要循环多少次,或者需要对一个已知的数据集(如列表、文件内容)进行逐个处理时,for 循环是更简洁、高效且不易出错的选择。
1.7.2013
在Python中,我们主要学习两种循环:`while`循环和`for`循环。简单来说,当你不确定要循环多少次时,用`while`;当你明确知道要循环多少次时,用`for`。
‹#›
while循环的语法与流程
核心语法格式
通过条件表达式控制循环执行。关键是循环体内必须有改变条件的逻辑,避免死循环。
while条件表达式:
# 循环体:需重复执行的代码,注意Python的缩进规则
执行语句1 # 核心业务逻辑
执行语句2 # 必须包含:修改条件变量的操作(如 count += 1)
STEP 01 · 判断条件
首先计算 while 关键字后的条件表达式。这是进入循环的“门禁系统”,计算结果必须是布尔值 True 或 False,以此决定程序的执行路径。
STEP 02 · 执行循环体
若条件结果为 True,执行缩进的代码块。执行完毕后,流程会自动跳转回条件判断步骤。若未在循环体内修改条件变量,会导致条件永远为真,触发“死循环”。
STEP 03 · 终止循环
当条件结果为 False 时,立即跳出 while 结构。此时不再执行循环体,程序指针移动到循环结束后的第一条语句,继续执行后续的业务逻辑。
1.7.2013
我们先来看`while`循环。它的语法很简单,就是`while`后面跟一个条件表达式。只要条件为真,就执行下面缩进的代码块。记住,循环体里一定要有能改变条件的语句,否则循环就永远停不下来了。
‹#›
while循环案例1:计算1到100的和
这是一个经典的累加求和问题:需要计算 1 + 2 + 3 + ... + 100 的最终结果。我们将使用 Python 的 while 循环结构来实现,通过初始化计数器和累加变量,在满足条件时不断执行循环体,直至完成所有数字的累加。
sum_result = 0 # 初始化总和变量
i = 1 # 初始化循环计数器
while i <= 100: # 设定循环终止条件
sum_result = sum_result + i # 核心:将当前数值累加到总和
i = i + 1 # 计数器自增,避免死循环
print("1到100的和是:", sum_result) # 输出最终计算结果
运行程序输出结果:
5050
这是高斯算法的经典应用,通过循环结构将复杂的重复计算自动化,代码逻辑清晰且易于理解。
核心逻辑:通过变量 `i` 控制循环次数,变量 `sum_result` 记录中间结果。每一次循环都让计数器 `i` 增加 1,同时将 `i` 的值累加到总和中。当 `i` 超过 100 时,循环条件不满足,自动退出并输出最终结果。这种模式是理解循环结构执行流程的基础。
1.7.2013
我们来看一个经典的`while`循环案例:计算1到100的和。我们用一个变量`sum_result`来存总和,用`i`来做计数器。循环条件是`i`小于等于100,在循环体里,我们把`i`加到总和里,然后`i`自增1。
‹#›
while循环案例2:猜数字游戏
趣味交互
人机对弈的经典入门案例
这是一个经典的人机交互小游戏。程序充当“出题者”,在后台随机生成目标数字;用户作为“解题者”,通过不断输入数字进行试探。在这个过程中,程序会给出即时的反馈提示,引导用户逼近正确答案,直到猜对为止。
游戏核心规则
程序在 1 到 100 的范围内随机生成一个神秘数字,用户通过输入数字进行猜测。系统会根据用户输入,即时反馈“猜大了”或“猜小了”的提示信息,用户根据提示调整猜测值,循环往复直到猜对数字,游戏结束。
Python 核心实现代码
import random
secret = random.randint(1, 100) # 生成1-100随机数
while True:
guess = int(input("请猜数字(1-100):"))
if guess > secret: print("猜大了!")
elif guess < secret: print("猜小了!")
else: print("恭喜,猜对了!"); break
核心应用场景分析
由于我们无法预知用户需要尝试多少次才能猜对答案,循环的终止条件(猜对数字)是动态的。此时使用 `while` 循环是最佳选择,它能在满足条件前持续执行,直到目标达成。
1.7.2013
`while`循环最适合的场景是我们不知道循环次数的时候。比如这个猜数字游戏,我们不知道用户要猜几次才能猜对,所以用`while`循环,只要用户没猜对,就一直让他猜下去。
‹#›
for 循环的语法与流程
核心语法格式
for 变量 in 序列:
# 循环体:针对序列中的每个元素,依次执行一次内部逻辑
执行操作 1
执行操作 2
... # 直至遍历完所有元素,循环终止
01
元素取值
从目标序列中取出第一个元素,将其赋值给循环变量,作为本次循环的操作对象。
02
执行逻辑
严格按照缩进规则,执行循环体内部的代码语句,完成对当前元素的业务处理。
03
迭代更新
自动从序列中取出下一个元素,重新赋值给变量,为下一轮循环准备新的操作数据。
04
终止判断
重复执行步骤2和3,直到序列中的所有元素都被遍历完毕,循环自动结束并退出。
1.7.2013
接下来我们看`for`循环。它的语法是`for`变量`in`序列。`for`循环会依次取出序列中的每个元素,赋值给变量,然后执行循环体。直到序列中的所有元素都取完,循环就结束了。
‹#›
for循环案例1:计算1到100的和(对比版)
问题:同样是计算 1 + 2 + 3 + ... + 100 的结果,在已知循环执行次数的场景下,使用 for 循环是更直观、更符合直觉的编程选择。我们来通过具体代码,看看它与 while 循环的区别。
sum_result = 0 # 初始化总和变量,作为累加的“容器”
for i in range(1, 101): # 生成1到100的序列,自动完成计数与循环
sum_result = sum_result + i # 将当前数字累加到总和中
print("1到100的和是:", sum_result) # 输出最终结果,得到5050
对比 while 循环的优势
for 循环将「计数器初始化」和「计数器更新」直接集成到了 range() 函数中。无需手动编写 i += 1,代码更简洁紧凑,同时也从根本上避免了因忘记更新条件而导致的死循环风险。
核心启示
当循环的次数是明确已知的(如从1数到100),优先选择 for 循环。它是一种“计数循环”,逻辑与人类的自然计数习惯保持一致,能让代码的可读性和可维护性得到显著提升,是处理此类问题的最优解。
1.7.2013
我们再用`for`循环来计算1到100的和。因为我们明确知道要循环100次,所以用`for`循环更合适。代码也更简洁,我们用`range(1, 101)`生成一个1到100的序列,`for`循环会自动遍历这个序列。
‹#›
for循环案例2:打印图形
任务目标
编写一段 Python 程序,在控制台中打印一个由星号 `*` 组成的 4 行直角三角形图案。通过这个案例,我们将学习如何将循环逻辑应用于具体的图形绘制场景。
终端输出效果
*
**
Python 核心代码实现
for i in range(1, 5): # 外层循环:控制行数,执行4次
for j in range(i): # 内层循环:控制每行*的数量,随行数递增
print("*", end="") # 不换行连续打印
print() # 每行结束后执行换行操作,开启新行
核心概念:循环嵌套
在一个循环结构中包含另一个循环,称为“循环嵌套”。本例中,外层循环决定图形的行数,内层循环决定每行的列数(星号数量)。内外两层循环的配合,是解决矩阵、图形等二维结构问题的关键技巧。
💡 拓展思考:如果要打印一个倒三角(第一行4个*,最后一行1个*)或者等腰三角形,需要如何修改内层循环的 `range()` 参数?尝试调整数值关系,观察图形的变化,理解循环变量在控制逻辑中的作用。
1.7.2013
`for`循环还非常适合用来打印图形。比如这个直角三角形,我们用一个外层循环控制行数,再用一个内层循环控制每行打印的星号数量。这种在循环里再套一个循环的方式,叫做循环嵌套。
‹#›
for循环 vs while循环
适用场景
for 循环:明确知道循环要执行的次数
while 循环:次数未知,依赖条件是否满足
计数器管理
for 循环:通常由 range() 自动生成管理
while 循环:需手动初始化、更新和维护变量
核心语法结构
for 循环:for 变量 in 可迭代序列: ...
while 循环:while 条件表达式为真: ...
代码使用特性
for 循环:结构紧凑,可读性与安全性更高
while 循环:逻辑灵活,适合复杂的动态判断
💡 黄金法则
知次数用 for,未知次数用 while
这是区分两种循环最实用的判断标准。当业务逻辑中能明确预知执行次数(如遍历固定列表)时,优先选择 for 循环;当循环是否继续完全依赖动态条件(如等待用户输入、监听状态变化)时,while 循环则是更灵活的选择。
1.7.2013
现在我们来总结一下`for`循环和`while`循环的区别。简单来说,就是“知次数用for,未知次数用while”。`for`循环适合处理知道具体次数的循环,而`while`循环更灵活,适合处理依赖条件的循环。
‹#›
拓展1:循环嵌套
核心定义:双重循环的逻辑结构
在一个循环的循环体内部,再嵌套另一个完整的循环结构。外层循环控制整体的执行轮次,内层循环则在每一轮中完成具体的细节遍历,二者配合可高效解决具有“二维规律”的重复性问题。
典型案例:九九乘法口诀表
这是循环嵌套最经典的教学案例。外层循环定义被乘数(行数),内层循环定义乘数(列数),通过内外层的联动,将1到9的数字两两相乘的结果有序输出。
Python 代码实现逻辑
for i in range(1, 10): # 外层:控制行数(被乘数 1-9)
for j in range(1, i+1): # 内层:控制每行列数(乘数 1-i)
print(f"{j} * {i} = {i*j}", end="\t")
print() # 每行结束后换行,形成阶梯式排版
核心逻辑:理解“层次”是掌握嵌套的关键
外层循环每执行一次,内层循环会完整执行一轮。这种结构不仅用于打印口诀表,更是处理二维数据(如Excel表格)、矩阵运算、图像像素遍历等复杂任务的基础。在实际开发中,合理的嵌套层数(通常不超过3层)能让代码结构清晰,而多层循环往往意味着可以通过算法优化来提升效率。
1.7.2013
我们刚才提到了循环嵌套。最经典的例子就是打印乘法口诀表。外层循环控制行数,也就是被乘数,内层循环控制每行的列数,也就是乘数。通过两层循环,我们就能打印出完整的乘法口诀表。
‹#›
拓展2:死循环与break/continue
死循环
指循环的条件表达式永远为真,导致循环体被无限次执行,程序陷入无法自动退出的执行状态。
while True:
print("我停不下来了!")
注意:开发中需极力避免,会导致程序卡死或资源耗尽。
break 语句
用于立即终止当前所在的整个循环结构(for/while)。一旦执行,程序将直接跳出循环体,继续执行循环之后的代码逻辑。
应用场景:猜数字游戏中,用户猜对答案后,执行 break 语句直接退出循环,无需进行后续无效猜测。
特性:属于“暴力退出”,彻底结束当前循环流程。
continue 语句
用于跳过当前循环的剩余语句,直接进入下一次循环的条件判断。循环本身不会终止,只是忽略当次迭代的后续操作。
应用场景:遍历 1 到 10 的数字,遇到偶数时执行 continue,程序将仅打印出该范围内的所有奇数。
特性:属于“临时跳过”,循环依然持续运行。
1.7.2013
在使用循环时,我们要避免死循环,也就是条件永远为真的循环。同时,我们还可以使用 break 和 continue 语句来控制循环。break 是终止整个循环,continue 是跳过当前这一轮循环。
‹#›
练习1:基础巩固
任务目标
请使用 Python 的for 循环语句,编写代码计算 10 的阶乘。理解循环结构在累乘运算中的应用逻辑。
核心计算逻辑:
10! = 1 × 2 × 3 × ... × 9 × 10
关键实现步骤
01
初始化变量
factorial = 1
02
设置循环范围
遍历 1 到 10
03
执行累乘操作
不断更新结果
思路解析:从“1”开始的累积之旅
阶乘的本质是将一个初始值为 1 的容器,依次装入 1 到 10 的所有整数进行连续乘法。你可以把它想象成滚雪球,初始值是一个小雪球,每一次循环乘以一个数,雪球就变大一点。请在编辑器中尝试实现,并观察每一轮循环后变量值的变化过程,这能帮助你更好地理解循环迭代的执行机制。
1.7.2013
现在我们来做个练习。请大家使用 for 循环,计算 10 的阶乘。提示一下,阶乘就是从 1 乘到这个数本身。大家可以先初始化一个变量为 1,然后在循环里不断相乘。
‹#›
练习2:逻辑挑战
核心任务:寻找特定规律的数字
使用 while 循环结构,在 100 到 200 的整数范围内进行搜索,找出第一个能被 17 整除的数字。这是一个典型的“不定次数”循环场景,需要通过动态条件判断来控制循环的开始与结束,而非预先知道执行次数。
STEP 01
变量初始化
设定起始值 num = 100,这是我们搜索范围的起点,也是循环计数器的初始状态。
STEP 02
设定循环边界
确定循环执行的条件为 num <= 200,确保程序的搜索范围严格限定在目标区间内,避免死循环。
STEP 03
核心判断逻辑
在每次循环中检查 num % 17 == 0 是否成立,利用取模运算验证当前数字是否符合整除要求。
STEP 04
终止并输出
一旦找到符合条件的数字,立即打印结果,并使用 break 语句强制退出循环,完成任务。
STEP 05
数值迭代
若当前数字不满足条件,则执行 num = num + 1,让计数器自增,继续下一轮的检查。
1.7.2013
第二个练习有点挑战性。请大家使用 while 循环,找出100到200之间第一个能被17整除的数字。这里我们不知道要循环多少次,所以用 while 循环。找到第一个符合条件的数字后,记得用 break 退出循环。
‹#›
本课总结
核心概念
循环结构是编程自动化的基石。它将重复执行的操作封装为代码块,让计算机代替人工完成海量、机械的重复任务,是解决重复性问题的核心逻辑。
双循环范式
for 循环:已知执行次数,适合数据遍历与固定次数的迭代,逻辑清晰可控。
while 循环:基于条件判断,适用于未知次数的场景,核心在于条件的动态更新。
关键避坑指南
务必为循环设置明确的终止条件!若条件恒成立将导致“死循环”,使程序无响应。在循环体内必须有改变条件的操作,确保程序能正常退出。
进阶控制技巧
利用循环嵌套处理多维数据;灵活使用break强制终止,continue跳过本轮,让程序执行逻辑更高效、更符合实际业务场景。
效率跃迁:化繁为简
从逐条编写代码到通过循环批量处理,这是从“手动”到“自动”的质变。无论是处理10条还是10万条数据,核心代码量保持不变,极大释放了生产力。
应用:无处不在的逻辑
循环逻辑贯穿于数据统计、游戏物理引擎、自动化运维脚本等各类程序中。只要存在“重复检查条件,重复执行动作”的需求,循环就是最直接的解决方案。
思维:抽象与泛化
掌握循环不仅仅是学会语法,更是培养“模式识别”能力。学会从具体问题中提炼出通用的重复模式,并用代码的逻辑去描述它,这是算法思维的重要起点。
1.7.2013
好了,我们来总结一下今天的内容。我们学习了两种循环:for循环和while循环,以及它们各自的适用场景。我们还学习了循环嵌套、break和continue这些高级技巧。
‹#›
课后作业
01
While 循环偶数输出
编写程序,使用 while 循环结构遍历数值,精准打印出 100 以内的所有偶数。请重点关注循环的条件控制与执行逻辑,确保边界值处理准确,同时在代码中添加注释说明核心步骤。
02
For 循环斐波那契计算
运用 for 循环结构计算斐波那契数列的前 20 项。理解递推公式(F(n)=F(n-1)+F(n-2))的代码实现方式,体会循环在数列迭代运算中的高效性,并输出清晰的计算结果序列。
03
嵌套循环菱形绘制
挑战进阶任务:通过多层循环嵌套的方式,设计并打印出由字母组成的菱形图案。这需要你拆解图形的行与列规律,合理使用外层与内层循环控制字符的输出位置和数量,锻炼复杂逻辑的编码能力。
💡 作业提交小贴士
请将代码保存为独立的 .py 文件,在关键逻辑处添加注释说明解题思路。完成基础要求后,鼓励大家尝试不同的循环实现方式并对比效率,或对输出格式进行美化(如对齐、颜色区分)。下节课请准备好代码进行演示与讲解。
1.7.2013
今天的课后作业有三个。第一个是用while循环打印偶数。第二个是用for循环计算斐波那契数列。第三个是挑战题,用循环嵌套打印一个菱形图案。希望大家认真完成。
‹#›
感谢聆听!
编程的魅力在于用逻辑创造无限可能!
1.7.2013
今天的课程到此结束,感谢同学们的认真听讲。希望大家课后能多加练习,真正掌握循环结构的用法。下课!
‹#›
$