控制流:让条件与重复对应真实规则
核心概念
程序需要根据条件做出决策,或重复执行操作。Python 提供:
- 条件分支:
if、elif、else - 循环:
while(条件循环)、for(遍历序列) - 控制语句:
break(跳出循环)、continue(跳过当前迭代)、pass(占位符)
所有控制结构都依赖缩进定义代码块。
if 语句:条件分支
基本形式:
age = 18
if age >= 18:
print("成年人")
print("可以投票")
print("这行总是执行")输出:
成年人
可以投票
这行总是执行关键点:
if后的表达式求值为布尔值(真值测试)- 冒号
:标记代码块开始 - 缩进的语句属于
if块 - 回到原缩进层级,
if块结束
if-else:二选一
x = 10
if x % 2 == 0:
print("偶数")
else:
print("奇数")if-elif-else:多分支
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"成绩: {grade}")输出:
成绩: Belif 是 "else if" 的缩写。Python 从上到下检查条件,第一个为真的分支执行后,跳过其余分支。
嵌套 if
x = 15
if x > 0:
print("正数")
if x % 2 == 0:
print(" 且是偶数")
else:
print(" 且是奇数")
else:
print("非正数")while 循环:条件重复
只要条件为真,就重复执行代码块:
count = 0
while count < 5:
print(f"count = {count}")
count += 1
print("循环结束")输出:
count = 0
count = 1
count = 2
count = 3
count = 4
循环结束注意:count += 1 是 count = count + 1 的简写。
无限循环与 break
while True:
response = input("输入 'quit' 退出: ")
if response == 'quit':
break
print(f"你输入了: {response}")
print("已退出")break 立即跳出最内层循环。没有 break,while True 会永远运行。
for 循环:遍历序列
for 循环逐个取出序列中的元素:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)输出:
apple
banana
cherryrange():生成数字序列
range(start, stop, step) 生成整数序列(不包括 stop):
for i in range(5):
print(i, end=" ")
# 输出: 0 1 2 3 4range(5) 等价于 range(0, 5, 1)。
指定起点和步长:
for i in range(2, 10, 2):
print(i, end=" ")
# 输出: 2 4 6 8倒序:
for i in range(10, 0, -1):
print(i, end=" ")
# 输出: 10 9 8 7 6 5 4 3 2 1遍历索引与值
使用 enumerate() 同时获取索引和值:
colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
print(f"{index}: {color}")输出:
0: red
1: green
2: bluebreak 和 continue
break:提前退出循环
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} = {x} * {n//x}")
break
else:
print(f"{n} 是质数")输出:
2 是质数
3 是质数
4 = 2 * 2
5 是质数
6 = 2 * 3
7 是质数
8 = 2 * 4
9 = 3 * 3continue:跳过当前迭代
for num in range(10):
if num % 2 == 0:
continue # 跳过偶数
print(num, end=" ")
# 输出: 1 3 5 7 9continue 跳到循环开头,开始下一次迭代。
else 子句:循环正常结束时执行
for 和 while 可以有 else 子句,在循环正常结束(未被 break 中断)时执行:
for n in range(2, 5):
if n == 10:
break
else:
print("循环未被 break 中断")
# 输出: 循环未被 break 中断对比:
for n in range(2, 15):
if n == 10:
break
else:
print("这行不会执行")
# 无输出(循环被 break 中断)实用场景:搜索元素
target = 7
numbers = [1, 3, 5, 7, 9]
for num in numbers:
if num == target:
print(f"找到 {target}")
break
else:
print(f"{target} 不在列表中")
# 输出: 找到 7pass:空操作占位符
pass 什么都不做,用于语法需要语句但逻辑上无需操作的地方:
def not_implemented_yet():
pass # TODO: 稍后实现
for x in range(10):
if x % 2 == 0:
pass # 偶数暂不处理
else:
print(x)pass 也可用于空类或空条件分支。
比较链:Pythonic 风格
Python 允许链式比较:
x = 5
if 0 < x < 10:
print("x 在 0 到 10 之间")等价于:
if 0 < x and x < 10:
print("x 在 0 到 10 之间")链式比较更简洁、可读性更强。
真值测试回顾
条件表达式会转换为布尔值。假值(False)包括:
False、None- 数字零:
0、0.0、0j - 空序列/集合:
''、[]、{}、()、set()
其他值为真:
if []:
print("不会执行")
if [1, 2, 3]:
print("非空列表为真")
# 输出: 非空列表为真练习
FizzBuzz:经典编程题。打印 1 到 100 的数字,但:
- 3 的倍数打印 "Fizz"
- 5 的倍数打印 "Buzz"
- 既是 3 又是 5 的倍数打印 "FizzBuzz"
pythonfor i in range(1, 101): # 你的代码质数判断:编写函数判断一个数是否为质数:
pythondef is_prime(n): if n < 2: return False # 你的代码 print(is_prime(17)) # True print(is_prime(18)) # False求和到阈值:累加 1, 2, 3, ... 直到总和超过 100,打印最后加入的数和总和。
嵌套循环:用嵌套
for打印乘法表(1x1 到 9x9):text1x1=1 1x2=2 1x3=3 ... 2x1=2 2x2=4 2x3=6 ... ...else 子句:在列表
[2, 4, 6, 8, 10]中搜索奇数,如果没找到打印 "所有数都是偶数"。
完成练习后,打开本章答案页核对。
下一步
掌握了基本控制流,下一节深入运算符:布尔逻辑、短路求值、比较运算符的细节。
回到第一章概览 · 返回Python 学习路线