第 4 章:Python 循环入门 ——for 与 while 的灵活运用
第 4 章:Python 循环入门 ——for 与 while 的灵活运用
4.1 为什么需要循环?——从“重复劳动”到“自动化执行”
想象一个场景:你需要打印100遍“我爱Python”。如果手动写100行print("我爱Python"),不仅费时,还容易出错。这时候,循环语句就能派上用场——它能让程序自动重复执行某段代码,把人从机械劳动中解放出来。
循环的核心价值:
- 简化代码:用几行代码实现几十甚至上百次重复操作;
- 批量处理:对列表、字符串等序列中的元素逐个处理(比如计算100个学生的平均分);
- 动态控制:根据条件决定是否继续重复(比如“直到用户输入正确答案才停止”)。
Python中最常用的两种循环是for循环和while循环,本章将从基础到实战,带你掌握这两种循环的用法。
4.2 for循环:遍历序列的“精准工具”(已知次数循环)
for循环的核心逻辑是**“遍历序列”**——即逐个取出序列(如列表、字符串、数字范围)中的元素,对每个元素执行相同操作。当你知道需要重复的次数,或要处理一个明确的序列时,优先用for循环。
4.2.1 用range()生成数字序列(固定次数循环)
range()函数能生成连续的整数序列,是for循环实现“固定次数重复”的常用工具,格式:
range(起始值, 结束值, 步长)
- 省略起始值时,默认从0开始(如
range(5)生成0,1,2,3,4); - 结束值是“上限但不包含”(如
range(2,6)生成2,3,4,5); - 步长是每次增加的数值(如
range(1,10,2)生成1,3,5,7,9)。
示例1:重复打印5次“Python真简单”
# 循环5次(range(5)生成0-4,共5个数字)
for i in range(5):
print("Python真简单")
运行后会连续输出5行“Python真简单”,i是循环变量,代表当前循环的次数(0到4)。
示例2:计算1到10的累加和
total = 0 # 用于存储总和
# 遍历1到10(range(1,11)生成1-10)
for num in range(1, 11):
total = total + num # 每次循环把num加到total中
print("1到10的和是:", total) # 输出55
4.2.2 遍历列表和字符串(处理序列元素)
for循环最强大的功能是直接遍历列表、字符串等序列,无需手动计算索引:
示例1:遍历列表(打印所有水果名称)
fruits = ["苹果", "香蕉", "橙子", "草莓"]
# 逐个取出列表中的元素,赋值给fruit变量
for fruit in fruits:
print("我喜欢吃:", fruit)
运行结果:
我喜欢吃: 苹果
我喜欢吃: 香蕉
我喜欢吃: 橙子
我喜欢吃: 草莓
示例2:遍历字符串(统计字母出现次数)
message = "Hello Python"
count = 0 # 统计字母"o"的出现次数
for char in message:
if char == "o":
count += 1
print("字母'o'出现了", count, "次") # 输出2次
4.2.3 即时练习:用for循环计算偶数和
需求:计算1到20中所有偶数的和(2+4+6+…+20)。
even_total = 0
# 补充代码:遍历1-20,累加偶数
for num in range(2, 21, 2): # 步长为2,直接生成偶数
even_total += num
print("1到20的偶数和是:", even_total) # 预期结果:110
4.3 while循环:条件满足就一直执行(未知次数循环)
while循环的逻辑是**“只要条件为True,就重复执行循环体”**。当你不知道具体要循环多少次,但知道循环停止的条件时(比如“直到用户输入‘quit’才停止”),适合用while循环。
4.3.1 基础格式与注意事项
# 初始化变量(控制循环的条件)
变量 = 初始值
while 条件(结果为True/False):
循环体(需要重复执行的代码)
更新变量(必须!否则可能无限循环)
关键:循环体中必须有“更新变量”的操作,让条件最终变为False,否则会陷入“无限循环”(程序永远停不下来)。
示例1:打印1到5的数字
num = 1 # 初始化变量
while num <= 5: # 条件:num小于等于5时继续循环
print(num)
num = num + 1 # 更新变量:num增加1(否则num永远是1,无限循环)
运行结果:
1
2
3
4
5
示例2:让用户输入,直到输入“退出”
while True: # 条件永远为True(无限循环的“开关”)
user_input = input("请输入内容(输入“退出”结束):")
if user_input == "退出":
print("程序结束!")
break # 跳出循环(后面会讲break的用法)
else:
print("你输入了:", user_input)
4.3.2 for循环vs while循环:如何选择?
| 循环类型 | 适用场景 | 典型案例 |
|---|---|---|
| for循环 | 已知循环次数;遍历序列(列表、字符串等) | 计算1到100的和;打印列表中所有元素 |
| while循环 | 未知循环次数;根据条件动态控制 | 猜数字游戏(直到猜对为止);用户输入监控 |
示例:用两种循环实现“打印3次‘加油’”
# for循环(已知次数3)
for _ in range(3): # 循环变量用_表示“不需要使用”
print("加油")
# while循环(已知次数3,仅作对比)
count = 0
while count < 3:
print("加油")
count += 1 # 等价于count = count + 1
4.3.3 即时练习:用while循环计算阶乘
需求:计算5的阶乘(5! = 5×4×3×2×1)。
factorial = 1 # 阶乘初始值为1
num = 5 # 计算5的阶乘
# 补充代码:用while循环计算
while num >= 1:
factorial *= num # 等价于factorial = factorial * num
num -= 1 # num减少1
print("5的阶乘是:", factorial) # 预期结果:120
4.4 循环控制:break和continue的灵活运用
默认情况下,循环会执行完所有次数或直到条件为False,但有时需要“提前结束循环”或“跳过当前步骤”,这时候就需要break和continue。
4.4.1 break:立即终止整个循环
break的作用是**“一旦执行,立刻跳出当前循环”**,不管后续还有多少次未执行。
示例:在列表中查找目标元素
names = ["张三", "李四", "王五", "赵六"]
target = "王五" # 要找的名字
for name in names:
if name == target:
print("找到目标:", name)
break # 找到后立即跳出循环,不再继续查找
else:
print("未找到,当前检查:", name)
运行结果:
未找到,当前检查: 张三
未找到,当前检查: 李四
找到目标: 王五
4.4.2 continue:跳过当前轮次,继续下一轮
continue的作用是**“跳过当前轮次的剩余代码,直接开始下一次循环”**,不会终止整个循环。
示例:打印1到10中的奇数(跳过偶数)
for num in range(1, 11):
if num % 2 == 0: # 如果是偶数
continue # 跳过当前轮次的print,直接进入下一轮
print(num) # 只打印奇数
运行结果:
1
3
5
7
9
4.4.3 避坑指南:警惕无限循环
- 用
while循环时,忘记更新控制条件的变量,会导致无限循环:
遇到无限循环时,按# 错误示例:无限循环(num始终为1,条件永远成立) num = 1 while num <= 5: print(num) # 缺少num += 1,程序会一直打印1Ctrl+C强制终止程序。
4.5 嵌套循环:循环里的循环(处理多层重复)
当需要处理“二维数据”(如表格、矩阵)或“多层重复逻辑”(如“打印5行,每行3个星号”)时,就需要嵌套循环——在一个循环内部再放一个循环。
4.5.1 基础示例:打印3行4列的星号矩阵
# 外层循环:控制行数(3行)
for i in range(3):
# 内层循环:控制每行的星号数(4个)
for j in range(4):
print("★", end="") # end=""表示不换行(默认print会换行)
print() # 每行结束后换行
运行结果:
★★★★
★★★★
★★★★
逻辑解析:外层循环执行1次,内层循环执行4次(打印4个星号),然后换行;外层循环共执行3次,最终得到3行4列的矩阵。
4.5.2 实用案例:遍历二维列表(学生成绩表)
# 二维列表:每个元素是一个学生的“姓名+多门成绩”
students = [
["张三", 90, 85, 95],
["李四", 78, 92, 88],
["王五", 65, 70, 68]
]
# 外层循环:遍历每个学生
for student in students:
name = student[0] # 第一个元素是姓名
scores = student[1:] # 从第二个元素开始是成绩
total = 0 # 存储该学生的总分
# 内层循环:计算该学生的总分
for score in scores:
total += score
# 计算平均分(保留1位小数)
average = round(total / len(scores), 1)
print(f"{name}的总分:{total},平均分:{average}")
运行结果:
张三的总分:270,平均分:90.0
李四的总分:258,平均分:86.0
王五的总分:203,平均分:67.7
4.5.3 即时练习:打印直角三角形
需求:用嵌套循环打印如下的直角三角形(5行,第1行1个★,第2行2个★…第5行5个★)。
★
★★
★★★
★★★★
★★★★★
代码参考:
# 外层循环控制行数(1-5)
for i in range(1, 6):
# 内层循环控制每行的星号数(1-i)
for j in range(i):
print("★", end="")
print() # 换行
4.6 迷你实战:批量生成员工工号
实战目标:
某公司需要为3个部门(技术部、市场部、行政部)的员工生成工号,规则:
- 工号格式:部门缩写+序号(如技术部第1人:JS001)
- 每个部门有5名员工,序号从001到005(不足3位补0)
代码实现与解析:
# 步骤1:定义部门信息(部门名称+缩写)
departments = [
["技术部", "JS"],
["市场部", "SC"],
["行政部", "XZ"]
]
# 步骤2:外层循环遍历部门
for dept_name, dept_code in departments:
print(f"====={dept_name}工号=====")
# 步骤3:内层循环生成该部门的5个工号
for i in range(1, 6):
# 用f-string格式化序号(补0至3位)
emp_id = f"{dept_code}{i:03d}" # 03d表示3位数字,不足补0
print(emp_id)
print() # 部门间空一行
运行结果:
=====技术部工号=====
JS001
JS002
JS003
JS004
JS005
=====市场部工号=====
SC001
SC002
SC003
SC004
SC005
=====行政部工号=====
XZ001
XZ002
XZ003
XZ004
XZ005
4.7 课后练习:循环综合应用
练习1:筛选并计算
有列表numbers = [15, 38, 7, 92, 24, 56, 83, 41, 67, 19],用循环实现:
- 筛选出所有大于40的数;
- 计算这些数的平均值;
- 打印筛选结果和平均值。
练习2:猜数字游戏
规则:
- 程序随机生成1-100的整数(需导入
random模块:import random; target = random.randint(1,100)); - 用户最多猜5次,每次输入后提示“太大了”或“太小了”;
- 猜对则提示“恭喜猜对!”,否则提示“次数用完,正确答案是x”。
练习3:打印九九乘法表
用嵌套循环打印如下格式的九九乘法表(注意对齐):
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...
1×9=9 2×9=18 ... 9×9=81
本章小结
本章我们掌握了让程序“重复工作”的核心工具——循环语句:
- for循环:通过
range()实现固定次数循环,或直接遍历列表、字符串等序列,代码简洁高效; - while循环:根据条件动态控制循环,适合未知次数的场景(如用户输入交互);
- 循环控制:
break终止整个循环,continue跳过当前轮次,避免无效执行; - 嵌套循环:处理多层重复逻辑(如矩阵、表格数据),外层控制“行”,内层控制“列”;
- 实战应用:通过批量生成工号、成绩统计等案例,学会用循环解决实际问题。
下一章,我们将学习“列表与字典”的高级操作,结合循环实现更灵活的数据处理(如列表推导式、字典遍历)!
更多推荐



所有评论(0)