Skip to main content

Python 基础

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 循环适合已知迭代次数或可迭代对象的场景。
  • 每次迭代,循环变量(itemnumberchar)会自动更新为下一个元素。

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 中断,循环条件变为 Trueelse 块不会执行。

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. 循环的注意事项

使用循环时需注意以下几点,以确保代码正确高效:

  1. 避免无限循环
    • while 循环中,确保条件最终会变为 False
    • 添加退出条件,如 while count <= 5
  2. 控制循环性能
    • 避免在循环中执行复杂计算或冗余操作。
  3. 谨慎使用嵌套循环
    • 嵌套过多可能导致性能问题,考虑替代方案(如列表推导式)。
  4. 清晰的循环逻辑
    • 使用有意义的变量名(如 fruit 而非 x)。
    • 添加注释说明循环目的,增强可读性。
  5. 处理空可迭代对象
    • 遍历空列表或空 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 处理正常结束。
  • 注意事项:避免无限循环、优化性能、保持代码清晰、处理空迭代对象。