一、for循环:基于迭代的循环逻辑
for 循环的设计初衷是遍历可迭代对象( iterable ),通过依次提取对象中的元素执行循环体。其语法结构如下:
for 变量名 in 可迭代对象:
循环体语句
其中,可迭代对象是指能够被 for 循环逐个访问的对象,常见的包括列表、元组、字符串、字典、集合以及生成器等。
1. 遍历基础数据类型
列表遍历
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
执行过程中, fruit 变量会依次被赋值为 "apple" 、 "banana" 、 "cherry" ,每次迭代都会执行 print(fruit) 语句。
字符串遍历
text = "Python"
for char in text:
print(char)
字符串本质上是字符的序列, for 循环会将每个字符依次赋给 char 变量,实现字符级别的操作。
字典遍历
student = {"name": "Alice", "age": 20, "major": "Computer Science"}
# 遍历键
for key in student:
print(key)
# 遍历值
for value in student.values():
print(value)
# 同时遍历键值对
for key, value in student.items():
print(f"{key}: {value}")
字典遍历可通过 keys() 、 values() 、 items() 方法分别获取键、值、键值对,其中 items() 返回的元组需使用两个变量接收。
2. range()函数的深度应用
range() 函数用于生成整数序列,其语法有三种形式:
① range(stop) :生成从0到 stop-1 的整数序列
② range(start, stop) :生成从 start 到 stop-1 的整数序列
③ range(start, stop, step) :生成从 start 到 stop-1 ,步长为 step 的整数序列
# 示例1:生成0到9的序列
for i in range(10):
print(i)
# 示例2:生成10到19的序列
for num in range(10, 20):
print(num)
# 示例3:生成1到10中的奇数
for odd in range(1, 11, 2):
print(odd)
range() 常与 for 循环结合实现固定次数的循环,例如循环打印列表元素的索引:
names = ["Bob", "Eve", "Charlie"]
for index in range(len(names)):
print(f"索引 {index}: {names[index]}")
3. 嵌套for循环
当处理多维数据(如矩阵、表格)时,需使用嵌套 for 循环:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=" ")
print() # 换行
外层循环遍历行,内层循环遍历每行的元素,最终输出二维矩阵。
二、while循环:条件驱动的循环控制
while 循环通过判断条件表达式的真假决定是否执行循环体,只要条件为 True ,循环就会持续运行。其语法如下:
while 条件表达式:
循环体语句
1. 基础使用场景
count = 0
while count < 5:
print(count)
count += 1
上述代码中, count 初始值为0,每次循环检查 count < 5 是否成立,若成立则执行循环体并更新 count ,直到条件不满足时退出循环。
2. 无限循环与控制语句
无限循环
通过设置恒为 True 的条件可创建无限循环,需搭配 break 手动终止:
while True:
user_input = input("输入q退出: ")
if user_input == "q":
break
break与continue
① break :立即终止整个循环,跳出循环体
② continue :跳过当前循环剩余语句,直接进入下一次循环
for num in range(10):
if num % 3 == 0:
continue # 跳过3的倍数
if num == 7:
break # 遇到7时终止循环
print(num)
3. while循环的典型应用
猜数字游戏
import random
target = random.randint(1, 100)
guess = 0
while guess != target:
guess = int(input("猜一个1到100的数字: "))
if guess < target:
print("太小了!")
elif guess > target:
print("太大了!")
print("猜对了!")
该程序通过 while 循环持续接收用户输入,直到猜中随机生成的数字。
三、循环中的else子句
Python的 for 和 while 循环支持 else 子句,其执行逻辑较为特殊:当循环未被 break 中断,正常结束时, else 子句才会执行。
# for循环示例
for num in range(3):
if num == 10:
break
else:
print("for循环正常结束")
# while循环示例
count = 0
while count < 3:
print(count)
count += 1
else:
print("while循环正常结束")
else 子句常用于简化代码逻辑,避免使用额外的标志位判断循环是否成功执行。
四、循环使用中的常见问题与解决方案
1. 死循环陷阱
死循环通常由以下原因导致:
①条件表达式永远为 True (如 while 1: )
②循环变量未正确更新
# 错误示例:死循环
count = 0
while count < 5:
print(count)
# 缺少count += 1,导致count始终为0
# 正确修复
count = 0
while count < 5:
print(count)
count += 1
2. 嵌套循环性能优化
过多的嵌套会导致时间复杂度呈指数级增长。例如,双重循环遍历两个列表的所有组合:
list_a = [1, 2, 3]
list_b = [4, 5, 6]
# 低效方式
result = []
for x in list_a:
for y in list_b:
result.append(x * y)
# 高效方式:使用列表推导式
result = [x * y for x in list_a for y in list_b]
列表推导式、生成器表达式以及 map() 、 filter() 等函数可显著提升代码效率。
3. 循环变量作用域
在Python中, for 和 while 循环内定义的变量在循环结束后仍可访问,需注意变量覆盖风险:
for i in range(5):
pass
print(i) # 输出4,i在循环外依然存在
# 可能的问题:意外覆盖变量
total = 10
for total in range(3): # 覆盖了外层的total变量
print(total)
五、总结
for 循环和 while 循环是Python编程的基础核心,二者相辅相成:
① for 循环适用于已知迭代次数或遍历可迭代对象的场景
② while 循环更擅长处理条件驱动、不确定循环次数的任务
熟练掌握 break 、 continue 和 else 子句,结合数据结构与内置函数,能够帮助开发者编写出简洁高效的代码。通过不断实践,循环结构将成为自动化脚本、算法实现、数据分析等领域的强大武器。