第5节:流程控制语句

到目前为止,我们写的 Python 代码都是从上到下一行接一行地执行。但真实的程序往往需要根据不同的情况做出不同的反应,或者重复执行某些任务。这就需要用到流程控制语句,本节主要讲解条件语句和循环语句。

1. 让程序做选择:条件语句

条件语句允许程序根据某个条件是否满足 (是 True 还是 False) 来决定执行哪段代码。最常用的条件语句是 ifelifelse

if 语句:满足条件才执行

if 语句是最基本的条件判断。它检查紧跟在 if 后面的条件表达式。如果条件为 True,就执行 if 下方缩进的代码块;如果条件为 False,就跳过这段缩进的代码块。

语法:

if 条件表达式:
    # 条件为 True 时执行的代码块 (必须缩进!)
    语句1
    语句2
    ...
## 这里是不受 if 控制的代码 (没有缩进)

重要:

  • 条件表达式 通常是一个结果为布尔值 (TrueFalse) 的表达式,比如比较运算 (age > 18) 或逻辑运算 (score >= 60 and score <= 100)。
  • 条件表达式后面必须有冒号 :
  • if 下方的代码块必须缩进 (通常是 4 个空格),表示这部分代码属于 if 语句。

示例:

age = 20

if age >= 18:
    print("您已成年。") # 条件 age >= 18 为 True,所以这行会执行

print("程序继续执行...") # 这行没有缩进,总会执行

temperature = 15
if temperature < 10:
    print("天气寒冷,请多穿衣服。") # 条件为 False,这行不会执行

if-else 语句:两种选择

if-else 语句提供了一种二选一的逻辑:如果 if 的条件为 True,执行 if 下方的代码块;否则 (即条件为 False 时),执行 else 下方的代码块。

语法:

if 条件表达式:
    # 条件为 True 时执行的代码块
    语句1
else:
    # 条件为 False 时执行的代码块 (else下方也要缩进!)
    语句2

示例:

score = 75

if score >= 60:
    print("恭喜,及格了!") # 条件为 True,执行这里
else:
    print("很遗憾,需要继续努力。")

## ---

light_is_on = False

if light_is_on == True: # 或者可以直接写 if light_is_on:
    print("灯是开着的。")
else:
    print("灯是关着的。") # 条件为 False,执行这里

if-elif-else 语句:多种选择

当有多个条件需要判断时(超过两种情况),可以使用 if-elif-else 结构。elif 是 "else if" 的缩写。程序会从上到下依次检查 ifelif 的条件:

  • 如果 if 条件为 True,执行其代码块,然后整个结构结束。
  • 如果 if 条件为 False,检查第一个 elif 的条件。如果为 True,执行其代码块,然后整个结构结束。
  • 如果第一个 elif 也为 False,检查下一个 elif...
  • 如果所有的 ifelif 条件都为 False,则执行 else 下方的代码块(else 是可选的)。

语法:

if 条件1:
    # 条件1 为 True 时执行
    语句块1
elif 条件2:
    # 条件1 为 False,条件2 为 True 时执行
    语句块2
elif 条件3:
    # 条件1、2 为 False,条件3 为 True 时执行
    语句块3
## ... 可以有更多 elif
else:
    # 以上所有条件都为 False 时执行 (可选)
    语句块N

示例:

grade = 85

if grade >= 90:
    print("优秀")
elif grade >= 80: # grade >= 90 不满足,检查这个 (85 >= 80 为 True)
    print("良好") # 执行这里,然后结束
elif grade >= 60:
    print("及格")
else:
    print("不及格")

## ---

day = "Sunday"

if day == "Saturday":
    print("今天是周六,休息!")
elif day == "Sunday":
    print("今天是周日,也休息!") # 执行这里
else:
    print("今天需要工作/学习。")

条件嵌套

if 语句内部还可以包含其他的 if 语句,形成嵌套结构,用于处理更复杂的逻辑。

age = 25
has_ticket = True

if age >= 18:
    print("已成年。")
    if has_ticket == True:
        print("可以入场。") # 嵌套的 if
    else:
        print("需要购票才能入场。") # 嵌套的 else
else:
    print("未成年,不能入场。")

注意:嵌套层数不宜过多,否则代码会变得难以理解。

2. 重复执行任务:循环语句

循环语句允许程序重复执行某段代码块,直到满足某个退出条件。Python 主要有两种循环:for 循环和 while 循环。

for 循环:遍历序列

for 循环通常用于遍历一个序列 (Sequence) 中的每个元素,比如列表、字符串或其他可迭代的对象。它会依次取出序列中的每个元素,并执行循环体内的代码。

语法:

for 临时变量 in 可迭代对象:
    # 对每个元素执行的代码块 (必须缩进!)
    语句1
    语句2
    # 在这里可以使用 临时变量
  • 可迭代对象:可以是列表、字符串等。
  • 临时变量:每次循环时,序列中的当前元素会被赋值给这个变量。你可以自己给它命名。

示例:遍历列表

fruits = ["apple", "banana", "cherry"]

for fruit in fruits: # 依次取出 "apple", "banana", "cherry" 赋值给 fruit
    print("我喜欢吃 " + fruit)

## 输出:
## 我喜欢吃 apple
## 我喜欢吃 banana
## 我喜欢吃 cherry

示例:遍历字符串

message = "Hello"

for char in message: # 依次取出 "H", "e", "l", "l", "o" 赋值给 char
    print(char)

## 输出:
## H
## e
## l
## l
## o

range() 函数:生成数字序列

如果想让代码重复固定次数,经常配合 range() 函数使用 for 循环。range() 可以生成一个整数序列。

  • range(结束值):生成从 0 到 结束值-1 的整数序列。
  • range(起始值, 结束值):生成从 起始值结束值-1 的整数序列。
  • range(起始值, 结束值, 步长):生成从 起始值 开始,每次增加 步长,直到 结束值-1 的序列。
## 打印 0 到 4
for i in range(5): # range(5) 生成 0, 1, 2, 3, 4
    print(i)

print("---")

## 打印 1 到 5
for i in range(1, 6): # range(1, 6) 生成 1, 2, 3, 4, 5
    print(i)

print("---")

## 打印 0 到 10 之间的偶数
for i in range(0, 11, 2): # range(0, 11, 2) 生成 0, 2, 4, 6, 8, 10
    print(i)

while 循环:当条件为真时持续执行

while 循环会在其后的条件表达式True 时,持续执行循环体内的代码块。每次执行完循环体后,会重新检查条件表达式。直到条件变为 False 时,循环才会结束。

语法:

while 条件表达式:
    # 条件为 True 时执行的代码块 (必须缩进!)
    语句1
    语句2
    # 重要:通常需要在这里更新与条件相关的变量,否则可能导致无限循环!

示例:

count = 0
while count < 5: # 条件 count < 5
    print("Count is:", count)
    count = count + 1 # 或者 count += 1,更新条件变量

print("循环结束")

## 输出:
## Count is: 0
## Count is: 1
## Count is: 2
## Count is: 3
## Count is: 4
## 循环结束

重要: 使用 while 循环时,必须确保循环体内部有代码能最终让 条件表达式 变为 False,否则就会陷入无限循环 (Infinite Loop),程序会一直运行下去,需要手动停止。

循环中的 breakcontinue (可选)

  • break 立刻跳出整个循环(forwhile),执行循环后面的代码。
  • continue 立刻结束当前这次循环,跳过本次循环中 continue 后面的语句,直接开始下一次循环。
## break 示例: 找到第一个大于 5 的数就停止
numbers = [1, 3, 7, 2, 9, 4]
for num in numbers:
    if num > 5:
        print("找到大于 5 的数:", num)
        break # 跳出整个 for 循环
    print("当前数字:", num)

## continue 示例: 只打印偶数
for i in range(1, 11):
    if i % 2 != 0: # 如果 i 是奇数
        continue # 跳过本次循环,不执行下面的 print
    print("偶数:", i)

3. 练习

  1. 编写一个程序,判断一个变量 score 的值:如果大于等于 90,打印 "A";如果大于等于 80 小于 90,打印 "B";如果大于等于 60 小于 80,打印 "C";否则打印 "D"。
  2. 使用 for 循环和 range() 函数,打印出 1 到 10 的所有数字。
  3. 创建一个包含几个朋友名字的列表,使用 for 循环向每个朋友打招呼,例如打印 "你好, [朋友名字]!"。
  4. 使用 while 循环,计算并打印出 1 到 5 的所有整数的和 (1+2+3+4+5)。
  5. 修改练习 4,如果累加的和超过 10,就使用 break 提前结束循环。

掌握了条件语句和循环语句,你就能编写出更智能、更灵活的程序了。下一章我们将学习如何将代码组织成可重用的块——函数。