Skip to content

第 4 章 流程控制

学习目标

  • if / elif / else 实现分支判断
  • forwhile 实现循环
  • break 跳出循环、用 continue 跳过本次循环
  • 能写出嵌套循环解决问题

4.1 分支:if / elif / else

分支让程序根据条件选择执行哪段代码。基本写法:

python
score = 85
if score >= 90:
    grade = "优秀"
elif score >= 80:
    grade = "良好"
elif score >= 60:
    grade = "及格"
else:
    grade = "不及格"
print(grade)

输出:

良好

语法要点:

  1. if 后面跟一个条件表达式冒号
  2. 条件为 True 时执行 if 代码块;为 False 时依次尝试 elif;都不满足时执行 else
  3. 条件成立时,只执行第一个成立的分支,后面的 elif / else 不再判断。
  4. elif 可以有多个,else 最多一个,else 可以省略。

判断成绩等级的流程:先看 score >= 90(85 不满足),再看 score >= 80(满足),于是 grade 赋值为 "良好",后面的分支不再执行。

4.2 for 循环与 range

循环让一段代码重复执行。for 循环用来遍历一个序列,最常见的序列由 range() 生成。

range(n) 生成 0n-1 的整数序列:

python
for i in range(3):
    print(i)

输出:

0
1
2

range(start, stop) 生成从 startstop-1 的序列,注意不包含 stop:

python
for i in range(1, 6):
    print(i, end=" ")

输出:

1 2 3 4 5

range(start, stop, step) 可以指定步长:

python
for i in range(0, 10, 2):
    print(i, end=" ")

输出:

0 2 4 6 8

经典练习:计算 1 到 100 的和:

python
total = 0
for i in range(1, 101):
    total += i
print(total)

输出:

5050

4.3 while 循环

while 循环在条件为真期间反复执行代码块,直到条件变为 False。适合循环次数不确定的场景。

python
n = 5
while n > 0:
    print(n, end=" ")
    n -= 1

输出:

5 4 3 2 1

n -= 1n 每次减 1,循环 5 次后 n 变成 0,条件 n > 0False,循环结束。如果忘记更新条件涉及的变量,循环永远不会结束,成为死循环(按 Ctrl+C 可以强制中断)。

4.4 break 与 continue

break 立即结束整个循环:

python
for i in range(10):
    if i == 3:
        break
    print(i, end=" ")

输出:

0 1 2

continue 跳过本次循环的剩余部分,直接进入下一次:

python
for i in range(5):
    if i == 2:
        continue
    print(i, end=" ")

输出:

0 1 3 4

区别:break 是「到此为止」,continue 是「这次算了,下次继续」。两者都可以用在 forwhile 中。

4.5 嵌套循环

循环内部可以再写循环,叫嵌套循环。外层每循环一次,内层完整地循环一遍。经典例子:九九乘法表。

python
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i * j}", end="  ")
    print()

输出:

1×1=1
1×2=2  2×2=4
1×3=3  2×3=6  3×3=9
1×4=4  2×4=8  3×4=12  4×4=16
1×5=5  2×5=10  3×5=15  4×5=20  5×5=25
1×6=6  2×6=12  3×6=18  4×6=24  5×6=30  6×6=36
1×7=7  2×7=14  3×7=21  4×7=28  5×7=35  6×7=42  7×7=49
1×8=8  2×8=16  3×8=24  4×8=32  5×8=40  6×8=48  7×8=56  8×8=64
1×9=9  2×9=18  3×9=27  4×9=36  5×9=45  6×9=54  7×9=63  8×9=72  9×9=81

解读:外层 i 是行数(1 到 9),内层 j 从 1 到 i。第 3 行(i=3)时,内层打印 1×32×33×3 三项后换行。end=" " 让内层各项之间用两个空格分隔而不是换行;内层结束后执行 print() 换行。

注意,break 在嵌套循环中只跳出最内层的循环。

动手实践

任务一:九九乘法表。 直接运行 4.5 节的代码,试着把 range(1, 10) 改成 range(1, 8),观察变化;再把输出顺序改成每列先输出大数(j×i 换成 i×j 不变,但交换打印顺序为 f"{i}×{j}={i * j}"),体会两个循环变量的角色。

任务二:猜数字。 程序随机想一个 1~100 的整数,用户反复猜,直到猜中。这里先用一行 import random 生成随机数,random 模块的完整讲解在第 8 章。

python
import random

secret = random.randint(1, 100)
print("我已经想好了一个 1~100 之间的数字。")

while True:
    guess = int(input("请猜一个数字: "))
    if guess == secret:
        print("猜对了!")
        break
    elif guess < secret:
        print("太小了")
    else:
        print("太大了")

while True 是无限循环,配合 break 在猜中时退出——这是「先循环,条件满足再退出」的常见写法。

常见错误

错误写法报错信息原因
if 3 > 2 后不加冒号SyntaxError: expected ':'if / elif / else / for / while 行尾必须有冒号
if 代码块缩进不一致IndentationError: unexpected indent同一代码块缩进必须一致
elif 拼成 elseifSyntaxError: invalid syntaxPython 的关键字是 elif
while n > 0: 内忘记 n -= 1程序卡住(死循环)条件永远为真,按 Ctrl+C 中断后检查循环体
range(1, 6) 想输出 1~6输出只有 1~5range 不包含结束值,应写 range(1, 7)

章末练习

基础

  1. 读入一个整数,判断它是奇数还是偶数(提示:用 % 2)。
  2. for 循环输出 1 到 10 的平方:1 4 9 16 25 36 49 64 81 100
  3. while 循环计算 1 到 100 所有偶数之和(结果是 2550)。

提高

  1. 输出 100 以内所有 7 的倍数。提示:用 range(7, 101, 7) 一步到位。
  2. 读入一个整数 n,输出 n 行由 * 组成的直角三角形,第 1 行 1 个、第 2 行 2 个,以此类推。提示:双层循环,外层控制行数,内层控制每行的个数。

挑战

  1. 输出 100 以内的所有素数。素数指只能被 1 和它本身整除的大于 1 的整数。提示:对每个数 n,用内层循环检查它能否被 2 到 √n 之间的数整除,一旦发现能整除就用 break 结束内层循环并判定为非素数。

章末自测

每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。

  1. range(3) 产生的整数序列是?
    • A. 0, 1, 2
    • B. 1, 2, 3
    • C. 0, 1, 2, 3
    • D. 1, 2
  2. range(1, 6) 包含哪些数?
    • A. 1, 2, 3, 4, 5
    • B. 1, 2, 3, 4, 5, 6
    • C. 0, 1, 2, 3, 4
    • D. 2, 3, 4, 5, 6
  3. if 语句的条件后面必须写?
    • A. 括号
    • B. 冒号
    • C. 分号
    • D. then
  4. 下列哪段循环一定是死循环?
    • A. while False:
    • B. x = 0; while x < 3: x += 1
    • C. while True: break
    • D. x = 5; while x > 0: print(x)
  5. break 的作用是?
    • A. 结束整个循环
    • B. 跳过本次循环继续下一次
    • C. 终止程序
    • D. 报错
  6. continue 的作用是?
    • A. 结束整个循环
    • B. 跳过本次循环的剩余部分,进入下一次
    • C. 终止程序
    • D. 报错
  7. 执行下面代码后,total 的值是?
    python
    total = 0
    for i in range(1, 101):
        total += i
    • A. 5050
    • B. 5000
    • C. 505
    • D. 5151
  8. 关于 if / elif / else,下列说法正确的是?
    • A. 一个 if 只能配一个 elif
    • B. else 后面还可以再跟 if
    • C. elif 可以有多个,但 else 最多一个
    • D. if 后面的条件可以省略
  9. 嵌套循环中,break 会跳出?
    • A. 所有循环
    • B. 最内层循环
    • C. 最外层循环
    • D. 报错
  10. while 的判断条件变为 False 时,程序会? A. 立即停止运行 B. 退出循环,继续执行循环后面的代码 C. 继续循环 D. 报错