Python控制流程全面解析:从基础到进阶,写出优雅高效代码
系列文章目录
01-快速上手Python编程:零基础也能轻松掌握的入门指南
02-Python控制流程全面解析:从基础到进阶,写出优雅高效代码
文章目录
前言
Python 以其简洁明了的语法和强大的功能,被誉为编程新手的首选语言。在编写程序时,控制流程 是不可或缺的核心部分。它让你的代码具备逻辑判断的能力(如条件语句),还能重复执行任务(如循环结构),大大提高代码的灵活性和可扩展性。更进一步,Python 提供了独特的列表推导式与生成器表达式,不仅让代码更优雅,还能有效提升性能。
如果你曾困惑于如何优雅地处理条件判断,或者如何在遍历数据时实现高效控制,那么这篇文章就是为你量身定制的。通过本文,你将全面掌握 Python 中的条件语句、循环结构、循环控制语句,以及 Python 中最具特色的列表推导式与生成器表达式,从而写出更简洁、更易读的代码。
一、条件语句:if-elif-else
条件语句是程序逻辑控制的基础,允许程序根据不同的条件执行不同的代码块。在 Python 中,条件语句主要由 if
、elif
和 else
组成,其语法简洁明了,便于阅读和使用。
1.1 基本语法
Python 的条件语句通过缩进表示代码块的层次,且条件表达式返回的必须是布尔值(True
或 False
)。
基本结构:
if 条件1:
执行语句块1
elif 条件2:
执行语句块2
else:
执行语句块3
if
: 用于判断条件是否为真。如果为真,则执行对应的代码块。elif
: 可选的,表示多个条件分支。可以有多个 elif
分支。else
: 可选的,表示所有条件均不满足时执行的代码块。注意事项:
elif
和 else
是可选的,但 if
是必须的。1.2 示例代码
1.2.1 判断数字正负性
以下示例判断一个数字是正数、负数还是零:
number = int(input("请输入一个整数:"))
if number > 0:
print("这是一个正数")
elif number < 0:
print("这是一个负数")
else:
print("这是零")
运行结果示例:
输入:5
输出:这是一个正数
1.2.2 多条件判断
以下示例根据考试成绩给出等级评价:
score = int(input("请输入考试成绩:"))
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
运行结果示例:
输入:85
输出:良好
1.2.3 嵌套的条件语句
条件语句可以嵌套使用,用于处理更复杂的逻辑。
age = int(input("请输入你的年龄:"))
if age >= 18:
print("你是成年人")
if age >= 60:
print("你已经达到退休年龄")
else:
print("你还未成年")
运行结果示例:
输入:65
输出:
你是成年人
你已经达到退休年龄
1.3 条件表达式的简化
Python 支持使用单行条件表达式简化简单的 if-else
语句。
基本语法:
值1 if 条件 else 值2
示例:
number = int(input("请输入一个整数:"))
result = "正数" if number > 0 else "负数或零"
print(result)
运行结果示例:
输入:-5
输出:负数或零
1.4 常见问题与注意事项
1.4.1 条件表达式的布尔值
条件语句中的条件会被自动转换为布尔值进行判断:
False
:None
、0
、空字符串 ""
、空列表 []
、空字典 {}
。True
。示例:
if []: # 空列表
print("这是 True")
else:
print("这是 False")
输出:
这是 False
1.4.2 缩进必须一致
缩进是 Python 条件语句的核心。如果缩进不一致,将引发 IndentationError
。
错误示例:
if True:
print("正确缩进")
print("错误缩进") # 缩进不一致
报错信息:
IndentationError: unindent does not match any outer indentation level
1.5 实际应用场景
1.5.1 场景1:登录系统的简单验证
username = input("请输入用户名:")
password = input("请输入密码:")
if username == "admin" and password == "123456":
print("登录成功")
else:
print("用户名或密码错误")
1.5.2 场景2:判断某年是否为闰年
year = int(input("请输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year} 是闰年")
else:
print(f"{year} 不是闰年")
二、循环结构:for 与 while
循环是程序控制流程中重要的一部分,用于让代码块在满足条件时重复执行。Python 提供了两种主要的循环结构:for 循环 和 while 循环,它们可以处理不同的循环场景。
2.1 for
循环
for
循环主要用于遍历可迭代对象,如列表、元组、字符串、字典、集合或使用 range()
函数生成的数字序列。
2.1.1 基本语法
for 变量 in 可迭代对象:
执行语句块
2.1.2 示例代码
示例1:遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
输出:
我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橙子
示例2:遍历字符串
text = "Python"
for char in text:
print(f"当前字符:{char}")
输出:
当前字符:P
当前字符:y
当前字符:t
当前字符:h
当前字符:o
当前字符:n
示例3:使用 range()
函数
range(start, stop, step)
函数生成一系列数字序列,默认从 start=0
开始,步长 step=1
。
for i in range(1, 6): # 生成 1 到 5 的整数
print(f"第 {i} 次循环")
输出:
第 1 次循环
第 2 次循环
第 3 次循环
第 4 次循环
第 5 次循环
示例4:遍历字典
scores = {"Alice": 90, "Bob": 85, "Charlie": 95}
for name, score in scores.items():
print(f"{name} 的分数是 {score}")
输出:
Alice 的分数是 90
Bob 的分数是 85
Charlie 的分数是 95
2.2 while
循环
while
循环用于在条件为 True
时重复执行代码块。当条件为 False
时,循环终止。
2.2.1 基本语法
while 条件:
执行语句块
2.2.2 示例代码
示例1:简单的计数器
count = 1
while count <= 5:
print(f"当前计数:{count}")
count += 1
输出:
当前计数:1
当前计数:2
当前计数:3
当前计数:4
当前计数:5
示例2:用户输入验证
password = ""
while password != "123456":
password = input("请输入密码:")
print("密码正确,登录成功!")
输入示例:
请输入密码:abc
请输入密码:123456
密码正确,登录成功!
示例3:无限循环
当条件始终为 True
时,while
会变成无限循环,通常需要通过 break
或外部条件来终止。
while True:
command = input("请输入命令(exit退出):")
if command == "exit":
print("程序退出")
break
else:
print(f"执行命令:{command}")
输出示例:
请输入命令(exit退出):help
执行命令:help
请输入命令(exit退出):exit
程序退出
2.3 循环嵌套
在 Python 中,for
和 while
循环可以嵌套使用,用于处理多层次循环。
示例:九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j} x {i} = {j * i}", end="\t")
print()
输出:
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9
...
2.4 注意事项
-
避免死循环:
在使用while
时,如果条件表达式始终为True
且没有退出机制,可能会导致死循环。count = 0 while count < 5: # 正确示例 print(count) count += 1
-
避免修改
for
循环的迭代变量:
在for
循环中,尽量不要手动修改循环变量,否则会导致结果不可预期。for i in range(5): i += 1 # 不推荐 print(i)
-
合理使用
break
和continue
:
在复杂的嵌套循环中,滥用break
和continue
会降低代码可读性,需谨慎使用。
2.5 for 与 while 的选择
-
使用场景:
- for 循环:适合遍历固定范围或已知大小的可迭代对象。
- while 循环:适合条件未知,需动态判断是否继续的场景。
-
性能对比:
- 两者性能差异较小,但
for
循环通常更加直观,代码结构更简洁。
三、循环控制语句:break 与 continue
循环控制语句用于改变循环的执行流程,使得我们可以更灵活地控制循环的行为。在 Python 中,常用的控制语句有 break
和 continue
。
3.1 break
语句:终止循环
break
语句的作用是立即退出当前循环,无论循环条件是否仍为真,循环都会提前结束。
3.1.1 基本语法
for/while 条件:
if 条件:
break
执行其他操作
3.1.2 示例代码
示例1:查找目标值并停止循环
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 3:
print("找到目标值 3,停止循环")
break
print(f"当前数字是:{num}")
输出:
当前数字是:1
当前数字是:2
找到目标值 3,停止循环
示例2:退出无限循环
break
常用于在满足条件时退出无限循环。
while True:
command = input("请输入命令(输入 'exit' 退出):")
if command == "exit":
print("程序结束")
break
print(f"你输入的命令是:{command}")
运行示例:
请输入命令(输入 'exit' 退出):help
你输入的命令是:help
请输入命令(输入 'exit' 退出):exit
程序结束
3.2 continue
语句:跳过本次循环
continue
语句的作用是跳过当前循环的剩余代码,直接进入下一次循环的判断。它不会终止整个循环。
3.2.1 基本语法
for/while 条件:
if 条件:
continue
执行其他操作
3.2.2 示例代码
示例1:筛选并跳过偶数
for i in range(1, 11):
if i % 2 == 0: # 如果是偶数,跳过本次循环
continue
print(i)
输出:
1
3
5
7
9
示例2:处理输入时跳过不符合条件的内容
words = ["apple", "", "banana", None, "cherry"]
for word in words:
if not word: # 如果是空字符串或 None,跳过
continue
print(f"有效单词:{word}")
输出:
有效单词:apple
有效单词:banana
有效单词:cherry
3.3 注意事项
break
与continue
只影响当前循环:它们不会直接作用于外层嵌套的循环。- 避免滥用:在代码中频繁使用
break
和continue
可能会降低代码的可读性,建议仅在必要时使用。 - 搭配条件语句使用:通常与
if
条件一起使用,以实现对特定条件的处理。
四、列表推导式与生成器表达式
Python 提供了简洁且高效的方法来构造列表和生成器——列表推导式 和 生成器表达式,它们是处理循环和条件的高级工具。
4.1 列表推导式
列表推导式是一种用于生成列表的简洁方式。它不仅可以替代繁琐的 for
循环,还可以通过条件筛选数据。
4.1.1 基本语法
[表达式 for 变量 in 可迭代对象 if 条件]
range()
等生成的对象。4.1.2 示例代码
示例1:生成一个平方数列表
squares = [x**2 for x in range(1, 6)]
print(squares) # 输出:[1, 4, 9, 16, 25]
示例2:筛选偶数
evens = [x for x in range(1, 11) if x % 2 == 0]
print(evens) # 输出:[2, 4, 6, 8, 10]
示例3:处理字符串列表
words = ["Python", "java", "C++", "ruby"]
upper_words = [word.upper() for word in words if len(word) > 3]
print(upper_words) # 输出:['PYTHON', 'JAVA', 'RUBY']
4.2 生成器表达式
生成器表达式与列表推导式类似,但它生成的是一个生成器对象,而不是直接生成一个列表。生成器可以按需动态生成数据,适合处理大数据量的场景。
4.2.1 基本语法
(表达式 for 变量 in 可迭代对象 if 条件)
与列表推导式的区别:
[]
,而生成器表达式使用小括号 ()
。4.2.2 示例代码
示例1:生成平方数生成器
squares_gen = (x**2 for x in range(1, 6))
for value in squares_gen:
print(value) # 依次输出:1, 4, 9, 16, 25
示例2:筛选数据生成器
evens_gen = (x for x in range(1, 11) if x % 2 == 0)
print(list(evens_gen)) # 转换为列表输出:[2, 4, 6, 8, 10]
4.3 列表推导式与生成器表达式的区别
特性 | 列表推导式 | 生成器表达式 |
---|---|---|
输出类型 | 列表(占用内存较多) | 生成器对象(按需生成,节省内存) |
使用场景 | 适合数据量较小的场景 | 适合数据量较大或无限数据流的场景 |
语法 | 方括号 [] |
小括号 () |
4.4 注意事项
-
性能选择:
- 如果需要所有数据一次性生成,使用列表推导式。
- 如果数据量大或只需按需获取,使用生成器表达式。
-
嵌套推导:
- 列表推导式和生成器表达式可以嵌套使用,但过于复杂的嵌套可能降低代码可读性。
五、总结
- 条件语句(if-elif-else): 学会根据不同条件执行不同的代码块,熟悉逻辑判断与条件表达式的简化写法。
- 循环结构(for 与 while): 理解
for
和while
的不同应用场景,以及如何遍历序列或实现条件驱动的循环。 - 循环控制语句(break 与 continue): 掌握如何提前退出循环或跳过某些不需要执行的循环步骤,提高代码灵活性。
- 列表推导式与生成器表达式: 学习用更简洁的方式构造列表或生成器,提升代码效率并节省内存。
作者:吴师兄大模型