当前位置:首页>python>Python 3 入门与进阶(六):流程控制语句

Python 3 入门与进阶(六):流程控制语句

  • 2026-09-04 17:49:21
Python 3 入门与进阶(六):流程控制语句

大家好,我是煜道。

今天我们一起来学习 流程控制语句。

引言

流程控制是程序逻辑的核心,它决定了程序执行的顺序和路径。在任何编程语言中,条件判断和循环结构都是构建复杂逻辑的基础构件。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的流程控制语句:

  1. 条件判断:if-elif-else结构,真值测试,嵌套条件。
  2. while循环:条件循环,循环else子句,break和continue。
  3. for循环:遍历可迭代对象,range、enumerate、zip。
  4. 高级迭代:列表推导式,嵌套推导式,迭代器协议。
  5. pass语句:空操作占位符。

掌握这些流程控制语句是编写任何程序的基础。在实际开发中,应根据具体需求选择合适的循环结构,合理使用break和continue控制流程,避免过多的嵌套层级。

最新文章

随机文章