第 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,但有时需要“提前结束循环”或“跳过当前步骤”,这时候就需要breakcontinue

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,程序会一直打印1
    
    遇到无限循环时,按Ctrl+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],用循环实现:

  1. 筛选出所有大于40的数;
  2. 计算这些数的平均值;
  3. 打印筛选结果和平均值。
练习2:猜数字游戏

规则:

  1. 程序随机生成1-100的整数(需导入random模块:import random; target = random.randint(1,100));
  2. 用户最多猜5次,每次输入后提示“太大了”或“太小了”;
  3. 猜对则提示“恭喜猜对!”,否则提示“次数用完,正确答案是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

本章小结

本章我们掌握了让程序“重复工作”的核心工具——循环语句:

  1. for循环:通过range()实现固定次数循环,或直接遍历列表、字符串等序列,代码简洁高效;
  2. while循环:根据条件动态控制循环,适合未知次数的场景(如用户输入交互);
  3. 循环控制break终止整个循环,continue跳过当前轮次,避免无效执行;
  4. 嵌套循环:处理多层重复逻辑(如矩阵、表格数据),外层控制“行”,内层控制“列”;
  5. 实战应用:通过批量生成工号、成绩统计等案例,学会用循环解决实际问题。

下一章,我们将学习“列表与字典”的高级操作,结合循环实现更灵活的数据处理(如列表推导式、字典遍历)!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐