
大家好,我是煜道。
今天我们一起来学习 流程控制语句。
引言
流程控制是程序逻辑的核心,它决定了程序执行的顺序和路径。在任何编程语言中,条件判断和循环结构都是构建复杂逻辑的基础构件。Python的流程控制语句设计简洁优雅,语法强制使用缩进来表示代码块,这一设计选择虽然曾引发争议,但确实提高了代码的可读性和一致性。
本文将详细探讨Python的条件判断语句(if语句)、循环结构(while循环和for循环)以及相关的控制语句(break、continue、pass)。通过丰富的示例,帮助我们掌握程序流程控制的精髓。

01 条件判断语句
1.1 if语句的基本结构
Python的if语句支持单分支、双分支和多分支形式:
# 单分支age = 18if age >= 18: print("已成年")# 双分支age = 16if age >= 18: print("已成年")else: print("未成年")# 多分支score = 85if score >= 90: print("优秀")elif score >= 80: print("良好")elif score >= 60: print("及格")else: print("不及格")

1.2 条件表达式
if语句的条件部分可以是任何返回布尔值的表达式:
# 比较运算x = 10if x > 0: print("正数")# 成员测试colors = ['red', 'green', 'blue']if'red'in colors: print("包含红色")# 身份测试a = [1, 2, 3]b = aif a is b: print("同一对象")# 布尔运算x = 5if0 < x < 10: print("x在0到10之间")# 对象的真值s = "hello"if s: # 非空字符串为真 print("非空字符串")lst = []ifnot lst: # 空列表为假 print("空列表")
1.3 嵌套条件
条件语句可以嵌套使用:
# 嵌套ifnumber = 0if number != 0:if number > 0: print("正数")else: print("负数")else: print("零")# 使用elif避免深层嵌套number = 0if number > 0: print("正数")elif number < 0: print("负数")else: print("零")
1.4 条件表达式(三元运算符)
Python的三元表达式:
# 基本形式x = 10y = 20max_val = x if x > y else y# 嵌套使用status = "成年"if age >= 18else"未成年"# 与or结合的技巧name = user_input or"匿名用户"# user_input为假时使用默认值

02 循环结构
2.1 while循环
while循环在条件为真时重复执行:
# 基本结构count = 0while count < 5: print(count) count += 1# 循环else子句count = 0while count < 5: print(count) count += 1else: print("循环正常结束") # 条件不满足时执行# break中断count = 0whileTrue: print(count) count += 1if count >= 5:break# continue跳过count = 0while count < 10: count += 1if count % 2 == 0:continue# 跳过偶数 print(count) # 打印奇数

2.2 for循环
for循环用于遍历可迭代对象:
# 遍历列表fruits = ['apple', 'banana', 'cherry']for fruit in fruits: print(fruit)# 遍历字符串for char in"Python": print(char)# 遍历数字序列for i in range(5): print(i) # 0, 1, 2, 3, 4# 指定范围for i in range(1, 10, 2): # 1, 3, 5, 7, 9 print(i)# 遍历字典d = {'a': 1, 'b': 2, 'c': 3}for key in d: print(key)for value in d.values(): print(value)for key, value in d.items(): print(f"{key}: {value}")# 遍历多个序列names = ['Alice', 'Bob', 'Charlie']ages = [25, 30, 35]for name, age in zip(names, ages): print(f"{name} is {age} years old")
2.3 for循环与else
for循环也可以有else子句:
# 正常遍历完成时执行for i in range(5): print(i)else: print("遍历完成")# break时else不执行for i in range(5):if i == 3: print("找到3")breakelse: print("未找到")
2.4 嵌套循环
# 打印乘法表for i in range(1, 10):for j in range(1, i + 1): print(f"{j}×{i}={i * j}", end=' ') print() # 换行# 使用break跳出多层循环for i in range(10):for j in range(10):if i * j > 50: print(f"Found: {i}×{j}={i * j}")breakelse:continuebreak

03 高级迭代技巧
3.1 enumerate
同时获取索引和值:
fruits = ['apple', 'banana', 'cherry']# 方式一for i in range(len(fruits)): print(i, fruits[i])# 方式二(推荐)for i, fruit in enumerate(fruits): print(i, fruit)# 指定起始索引for i, fruit in enumerate(fruits, start=1): print(f"{i}. {fruit}")
3.2 zip
并行遍历多个序列:
names = ['Alice', 'Bob', 'Charlie']ages = [25, 30, 35]cities = ['Beijing', 'Shanghai', 'Guangzhou']# 基本用法for name, age, city in zip(names, ages, cities): print(f"{name}, {age}, {city}")# 转换为字典info = dict(zip(names, cities))# 分割列表pairs = [(1, 'a'), (2, 'b'), (3, 'c')]numbers, letters = zip(*pairs)
3.3 range对象
range生成一个整数序列,是可迭代对象但不是列表:
# range的基本用法r = range(10)print(list(r)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 范围和步长print(list(range(1, 10))) # 1-9print(list(range(1, 10, 2))) # 奇数print(list(range(10, 0, -1))) # 倒序# 惰性求值r = range(10 ** 100) # 不会立即生成所有元素print(r[0]) # 0print(r[-1]) # 9999999999...999# range的优势:节省内存import sysprint(sys.getsizeof(range(10))) # 很小print(sys.getsizeof(list(range(10)))) # 较大
3.4 列表推导式中的if
在列表推导式中使用条件过滤:
# 基本推导式squares = [x ** 2for x in range(10)]# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 带条件过滤even_squares = [x ** 2for x in range(10) if x % 2 == 0]# [0, 4, 16, 36, 64]# 多重条件divisible = [x for x in range(1, 31) if x % 3 == 0and x % 5 == 0]# [15, 30]# 条件表达式signs = ['正'if x > 0else'零'if x == 0else'负'for x in range(-2, 3)]# ['负', '负', '零', '正', '正']
3.5 嵌套列表推导式
# 二维列表扁平化matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]flat = [num for row in matrix for num in row]# [1, 2, 3, 4, 5, 6, 7, 8, 9]# 生成矩阵转置transposed = [[row[i] for row in matrix] for i in range(3)]# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]# 过滤并转换data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]result = [x for row in data for x in row if x % 2 == 1]# [1, 3, 5, 7, 9]

04 迭代器协议
4.1 可迭代对象与迭代器
# 可迭代对象:实现了__iter__方法lst = [1, 2, 3]print(hasattr(lst, '__iter__')) # Trueprint(hasattr(lst, '__next__')) # False# 迭代器:实现了__iter__和__next__方法it = iter(lst) # 获取迭代器print(hasattr(it, '__iter__')) # Trueprint(hasattr(it, '__next__')) # True# 手动迭代print(next(it)) # 1print(next(it)) # 2print(next(it)) # 3# print(next(it)) # StopIteration异常

4.2 自定义迭代器
classRange:def__init__(self, start, end=None, step=1):if end isNone: end, start = start, 0 self.start = start self.end = end self.step = stepdef__iter__(self):return selfdef__next__(self):if self.step > 0:if self.start >= self.end:raise StopIterationelse:if self.start <= self.end:raise StopIteration current = self.start self.start += self.stepreturn current# 使用for i in Range(5): print(i) # 0, 1, 2, 3, 4

05 pass语句
pass是Python的空操作语句,用作占位符:
# if语句中需要代码块但暂无逻辑if condition:pass# 稍后实现# 类定义中classMyClass:pass# 稍后添加方法# 函数定义中defnot_implemented():pass# 循环中for i in range(10):pass# 稍后添加逻辑

06 实战示例
6.1 猜数字游戏
import randomdefguess_number(): target = random.randint(1, 100) attempts = 0 max_attempts = 7 print("猜数字游戏(1-100)") print(f"你有{max_attempts}次机会")while attempts < max_attempts:try: guess = int(input(f"\n第{attempts + 1}次尝试: "))except ValueError: print("请输入有效数字")continue attempts += 1if guess == target: print(f"恭喜!你用了{attempts}次猜中")returnelif guess < target: print("太小了")else: print("太大了") print(f"\n游戏结束。正确答案是{target}")guess_number()
6.2 素数判断与生成
defis_prime(n):"""判断是否为素数"""if n < 2:returnFalseif n == 2:returnTrueif n % 2 == 0:returnFalsefor i in range(3, int(n ** 0.5) + 1, 2):if n % i == 0:returnFalsereturnTruedefgenerate_primes(limit):"""生成limit以内的所有素数""" primes = []for num in range(2, limit + 1):if is_prime(num): primes.append(num)return primes# 使用print(generate_primes(100))# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
6.3 斐波那契数列
deffibonacci(n):"""生成前n个斐波那契数"""if n <= 0:return []if n == 1:return [0] fib = [0, 1]while len(fib) < n: fib.append(fib[-1] + fib[-2])return fibdeffibonacci_generator():"""斐波那契数列生成器""" a, b = 0, 1whileTrue:yield a a, b = b, a + b# 使用生成器fib_gen = fibonacci_generator()for i, fib in enumerate(fib_gen):if i >= 10:break print(fib, end=' ')# 0 1 1 2 3 5 8 13 21 34

07 小结
本文系统介绍了Python的流程控制语句:
- 条件判断:if-elif-else结构,真值测试,嵌套条件。
- while循环:条件循环,循环else子句,break和continue。
- for循环:遍历可迭代对象,range、enumerate、zip。
掌握这些流程控制语句是编写任何程序的基础。在实际开发中,应根据具体需求选择合适的循环结构,合理使用break和continue控制流程,避免过多的嵌套层级。
