第 4 章 流程控制
学习目标
- 用
if/elif/else实现分支判断 - 用
for和while实现循环 - 用
break跳出循环、用continue跳过本次循环 - 能写出嵌套循环解决问题
4.1 分支:if / elif / else
分支让程序根据条件选择执行哪段代码。基本写法:
score = 85
if score >= 90:
grade = "优秀"
elif score >= 80:
grade = "良好"
elif score >= 60:
grade = "及格"
else:
grade = "不及格"
print(grade)输出:
良好语法要点:
if后面跟一个条件表达式和冒号。- 条件为
True时执行if代码块;为False时依次尝试elif;都不满足时执行else。 - 条件成立时,只执行第一个成立的分支,后面的
elif/else不再判断。 elif可以有多个,else最多一个,else可以省略。
判断成绩等级的流程:先看 score >= 90(85 不满足),再看 score >= 80(满足),于是 grade 赋值为 "良好",后面的分支不再执行。
4.2 for 循环与 range
循环让一段代码重复执行。for 循环用来遍历一个序列,最常见的序列由 range() 生成。
range(n) 生成 0 到 n-1 的整数序列:
for i in range(3):
print(i)输出:
0
1
2range(start, stop) 生成从 start 到 stop-1 的序列,注意不包含 stop:
for i in range(1, 6):
print(i, end=" ")输出:
1 2 3 4 5range(start, stop, step) 可以指定步长:
for i in range(0, 10, 2):
print(i, end=" ")输出:
0 2 4 6 8经典练习:计算 1 到 100 的和:
total = 0
for i in range(1, 101):
total += i
print(total)输出:
50504.3 while 循环
while 循环在条件为真期间反复执行代码块,直到条件变为 False。适合循环次数不确定的场景。
n = 5
while n > 0:
print(n, end=" ")
n -= 1输出:
5 4 3 2 1n -= 1 让 n 每次减 1,循环 5 次后 n 变成 0,条件 n > 0 为 False,循环结束。如果忘记更新条件涉及的变量,循环永远不会结束,成为死循环(按 Ctrl+C 可以强制中断)。
4.4 break 与 continue
break 立即结束整个循环:
for i in range(10):
if i == 3:
break
print(i, end=" ")输出:
0 1 2continue 跳过本次循环的剩余部分,直接进入下一次:
for i in range(5):
if i == 2:
continue
print(i, end=" ")输出:
0 1 3 4区别:break 是「到此为止」,continue 是「这次算了,下次继续」。两者都可以用在 for 和 while 中。
4.5 嵌套循环
循环内部可以再写循环,叫嵌套循环。外层每循环一次,内层完整地循环一遍。经典例子:九九乘法表。
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×3、2×3、3×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 章。
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 拼成 elseif | SyntaxError: invalid syntax | Python 的关键字是 elif |
while n > 0: 内忘记 n -= 1 | 程序卡住(死循环) | 条件永远为真,按 Ctrl+C 中断后检查循环体 |
用 range(1, 6) 想输出 1~6 | 输出只有 1~5 | range 不包含结束值,应写 range(1, 7) |
章末练习
基础
- 读入一个整数,判断它是奇数还是偶数(提示:用
% 2)。 - 用
for循环输出 1 到 10 的平方:1 4 9 16 25 36 49 64 81 100。 - 用
while循环计算 1 到 100 所有偶数之和(结果是 2550)。
提高
- 输出 100 以内所有 7 的倍数。提示:用
range(7, 101, 7)一步到位。 - 读入一个整数
n,输出n行由*组成的直角三角形,第 1 行 1 个、第 2 行 2 个,以此类推。提示:双层循环,外层控制行数,内层控制每行的个数。
挑战
- 输出 100 以内的所有素数。素数指只能被 1 和它本身整除的大于 1 的整数。提示:对每个数
n,用内层循环检查它能否被 2 到 √n 之间的数整除,一旦发现能整除就用break结束内层循环并判定为非素数。
章末自测
每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。
range(3)产生的整数序列是?- A.
0, 1, 2 - B.
1, 2, 3 - C.
0, 1, 2, 3 - D.
1, 2
- A.
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
- A.
if语句的条件后面必须写?- A. 括号
- B. 冒号
- C. 分号
- D.
then
- 下列哪段循环一定是死循环?
- A.
while False: - B.
x = 0; while x < 3: x += 1 - C.
while True: break - D.
x = 5; while x > 0: print(x)
- A.
break的作用是?- A. 结束整个循环
- B. 跳过本次循环继续下一次
- C. 终止程序
- D. 报错
continue的作用是?- A. 结束整个循环
- B. 跳过本次循环的剩余部分,进入下一次
- C. 终止程序
- D. 报错
- 执行下面代码后,
total的值是?pythontotal = 0 for i in range(1, 101): total += i- A.
5050 - B.
5000 - C.
505 - D.
5151
- A.
- 关于
if/elif/else,下列说法正确的是?- A. 一个
if只能配一个elif - B.
else后面还可以再跟if - C.
elif可以有多个,但else最多一个 - D.
if后面的条件可以省略
- A. 一个
- 嵌套循环中,
break会跳出?- A. 所有循环
- B. 最内层循环
- C. 最外层循环
- D. 报错
- 当
while的判断条件变为False时,程序会? A. 立即停止运行 B. 退出循环,继续执行循环后面的代码 C. 继续循环 D. 报错
