Python 循环
本章节将详细介绍 Python 中的循环结构,适合初学者和希望深入理解循环的开发者。我们将从循环的概念入手,逐步讲解 for 和 while 循环的基本使用与注意事项。
1. 循环的概念
循环是编程中用于重复执行代码块的结构。当需要多次执行相同的操作(如处理列表中的每个元素或重复某任务直到满足条件)时,循环可以减少代码冗余,提高效率。Python 提供了两种主要循环结构:
for
循环:用于遍历已知数量的元素(如列表、字符串)或固定次数的迭代。while
循环:基于条件重复执行,适合未知迭代次数的场景。
为什么要用循环?
假设你想打印 1 到 5 的数字,没有循环需要写五次 print
语句;有了循环,只需几行代码即可完成,代码更简洁且易于扩展。
2. for 循环的基本使用
for
循环用于遍历可迭代对象(如列表、元组、字符串、范围)中的元素。基本语法如下:
for item in iterable:
# 代码块
print(item)
2.1 遍历列表
for
循环常用于处理列表中的每个元素:
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"当前水果:{fruit}")
输出:
当前水果:苹果
当前水果:香蕉
当前水果:橙子
fruits
是可迭代对象,fruit
是每次迭代的变量。- 缩进定义循环体,循环会自动遍历所有元素。
2.2 使用 range() 函数
range()
生成一个数字序列,常用于固定次数的循环:
for number in range(1, 6): # 从 1 到 5
print(f"数字:{number}")
输出:
数字:1
数字:2
数字:3
数字:4
数字:5
range(1, 6)
生成 1 到 5 的序列(取前不取后,不包含 6)。- 可选参数:
range(start, stop, step)
,step
指定步长,如range(0, 10, 2)
生成 0, 2, 4, 6, 8。
2.3 遍历字符串
字符串是可迭代的,可以逐字符处理:
word = "Python"
for char in word:
print(f"字符:{char}")
输出:
字符:P
字符:y
字符:t
字符:h
字符:o
字符:n
要点:
for
循环适合已知迭代次数或可迭代对象的场景。- 每次迭代,循环变量(
item
、number
、char
)会自动更新为下一个元素。
3. while 循环的基本使用
while
循环在条件为 True
时重复执行代码块,条件为 False
时停止。基本语法如下:
while condition:
# 代码块
3.1 简单计数循环
使用 while
实现计数功能:
count = 1
while count <= 5:
print(f"计数:{count}")
count += 1
输出:
计数:1
计数:2
计数:3
计数:4
计数:5
count += 1
更新循环变量,防止无限循环。- 条件
count <= 5
控制循环次数。
3.2 基于用户输入的循环
while
适合处理动态条件,如用户输入:
user_input = ""
while user_input != "退出":
user_input = input("请输入内容(输入‘退出’结束):")
print(f"你输入了:{user_input}")
输出(假设用户输入“hello”然后“退出”):
请输入内容(输入‘退出’结束):hello
你输入了:hello
请输入内容(输入‘退出’结束):退出
你输入了:退出
- 循环在用户输入“退出”时停止。
input()
获取用户输入,动态更新条件。
要点:
while
循环适合条件驱动的场景,迭代次数可能未知。- 必须确保条件最终会变为
False
,否则会导致无限循环。
4. 循环控制语句
Python 提供三种控制语句来调整循环行为:
break
:立即退出循环。continue
:跳过当前迭代,继续下一次。else
:在循环正常结束,即循环条件变为 False(未被break
中断)时执行。
4.1 使用 break
终止循环,常用于满足特定条件时:
for number in range(1, 10):
if number == 5:
break
print(f"数字:{number}")
输出:
数字:1
数字:2
数字:3
数字:4
- 遇到
number == 5
时,循环立即终止。
4.2 使用 continue
跳过当前迭代,继续下一次:
for number in range(1, 6):
if number % 2 == 0:
continue
print(f"奇数:{number}")
输出:
奇数:1
奇数:3
奇数:5
- 偶数时跳过
print
,继续下一次迭代。
4.3 使用 else
else
在循环正常结束时执行,即循环条件变为 False
:
number = 1
while number <= 3:
print(f"数字:{number}")
number += 1
else:
print("循环正常结束")
输出:
数字:1
数字:2
数字:3
循环正常结束
- 如果循环被
break
中断,循环条件变为True
,else
块不会执行。
5. 嵌套循环
循环可以嵌套,用于处理多维数据结构,如矩阵:
rows = 3
cols = 2
for i in range(rows):
for j in range(cols):
print(f"位置 ({i}, {j})")
输出:
位置 (0, 0)
位置 (0, 1)
位置 (1, 0)
位置 (1, 1)
位置 (2, 0)
位置 (2, 1)
- 外层循环控制行,内层循环控制列。
- 注意:嵌套循环会显著增加执行次数(
rows * cols
次)。
6. 循环的注意事项
使用循环时需注意以下几点,以确保代码正确高效:
- 避免无限循环:
- 在
while
循环中,确保条件最终会变为False
。 - 添加退出条件,如
while count <= 5
。
- 在
- 控制循环性能:
- 避免在循环中执行复杂计算或冗余操作。
- 谨慎使用嵌套循环:
- 嵌套过多可能导致性能问题,考虑替代方案(如列表推导式)。
- 清晰的循环逻辑:
- 使用有意义的变量名(如
fruit
而非x
)。 - 添加注释说明循环目的,增强可读性。
- 使用有意义的变量名(如
- 处理空可迭代对象:
- 遍历空列表或空
range
时,for
循环不会执行循环体。
- 遍历空列表或空
示例:
empty_list = []
for item in empty_list:
print("不会执行")
示例(列表推导式替代嵌套循环):
matrix = [[1, 2], [3, 4], [5, 6]]
flat_list = [num for row in matrix for num in row]
print(flat_list) # 输出 [1, 2, 3, 4, 5, 6]
示例(推荐)
data = [1, 2, 3, 4, 5]
for item in data: # 直接迭代
print(item)
示例(低效代码):
data = [1, 2, 3, 4, 5]
for i in range(len(data)):
print(data[i]) # 每次通过索引访问
示例(无限循环,需避免):
count = 1
while count > 0: # 无限循环,count 永远 > 0
print("无限循环!")
count += 1
7. 总结
for
循环:适合遍历可迭代对象或固定次数迭代,使用range()
或直接迭代。while
循环:while
循环适合条件驱动的场景,需注意避免无限循环。- 控制语句:
break
提前退出,continue
跳过本次迭代,else
处理正常结束。 - 注意事项:避免无限循环、优化性能、保持代码清晰、处理空迭代对象。