一、循环概述
1. 为什么需要循环?
假设我们需要打印 1 到 5 的数字,如果没有循环,代码会是这样的:
print(1)
print(2)
print(3)
print(4)
print(5)
如果要打印 1 到 1000,这样写显然不现实。循环的作用就是用少量代码实现重复操作。
二、for 循环(最常用)
for 循环用于遍历可迭代对象(如列表、字符串、字典等),每次循环取出可迭代对象中的一个元素执行代码块。
1. 基本语法
for 变量 in 可迭代对象:
# 循环体代码块(注意缩进)
执行语句
变量:每次循环会被赋值为可迭代对象中的当前元素。
可迭代对象:可以被 “逐个访问” 的对象,如列表 [1,2,3]、字符串 "hello" 等。
缩进:Python 用缩进(通常 4 个空格)表示代码块,循环体必须缩进。
例子:遍历列表打印元素
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"当前水果:{fruit}")
代码解释:
第一次循环:fruit = "苹果",打印 当前水果:苹果。
第二次循环:fruit = "香蕉",打印 当前水果:香蕉。
第三次循环:fruit = "橙子",打印 当前水果:橙子。
2. range() 函数:生成数字序列
for 循环常搭配 range() 函数使用,用于生成指定范围的数字序列。
range() 的三种用法
语法
说明
示例
生成的序列
range(stop)
从 0 开始,到 stop-1 结束
range(5)
0,1,2,3,4
range(start, stop)
从 start 开始,到 stop-1 结束
range(2, 6)
2,3,4,5
range(start, stop, step)
从 start 开始,步长为 step
range(1, 10, 2)
1,3,5,7,9
例子 1:打印 1 到 5
for i in range(1, 6): # 注意:stop 是 6,所以到 5 结束
print(i)
例子 2:打印 10 以内的偶数(步长为 2)
for i in range(0, 11, 2):
print(i) # 输出:0,2,4,6,8,10
3. 遍历常见可迭代对象
(1)遍历字符串:逐个访问字符
text = "Python"
for char in text:
print(char) # 依次输出:P, y, t, h, o, n
(2)遍历字典:键、值、键值对
字典有三种遍历方式,需根据需求选择:
dict.keys():遍历所有键
dict.values():遍历所有值
dict.items():遍历键值对(最常用)
student = {"name": "张三", "age": 20, "city": "北京"}
# 方式 1:遍历键
print("--- 键 ---")
for key in student.keys():
print(key) # 输出:name, age, city
# 方式 2:遍历值
print("--- 值 ---")
for value in student.values():
print(value) # 输出:张三, 20, 北京
# 方式 3:遍历键值对(推荐)
print("--- 键值对 ---")
for key, value in student.items():
print(f"{key}: {value}")
三、while 循环:条件控制循环
while 循环会在条件为 True 时持续执行,直到条件变为 False。
1. 基本语法
while 条件:
# 循环体
执行语句
条件:一个布尔表达式(结果为 True 或 False)。
注意:如果条件永远为 True,会变成无限循环(需用 break 终止)。
例子:打印 1 到 5
count = 1 # 初始化计数器
while count <= 5: # 条件:count 小于等于 5
print(count)
count += 1 # 计数器加 1(关键!否则会无限循环)
代码解释:
初始 count = 1,条件 1 <= 5 为 True,打印 1,count 变为 2。
直到 count = 6,条件 6 <= 5 为 False,循环结束。
2. 无限循环与 break
如果需要循环一直执行直到满足某个条件才停止,可以用 while True 配合 break。
例子:用户输入密码,直到正确为止
correct_password = "123456"
while True: # 无限循环
user_input = input("请输入密码:")
if user_input == correct_password:
print("密码正确!")
break # 终止循环
else:
print("密码错误,请重试。")
四、循环控制语句:break、continue、pass
1. break:终止整个循环
break 会立即跳出当前所在的循环,不再执行剩余的循环次数。
例子:遍历列表,遇到 "橙子" 就停止
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
if fruit == "橙子":
break # 遇到橙子,终止循环
print(fruit)
# 输出:苹果, 香蕉
2. continue:跳过当前循环,继续下一次
continue 会跳过当前循环的剩余代码,直接进入下一次循环。
例子:打印 1 到 10 中的奇数(跳过偶数)
for i in range(1, 11):
if i % 2 == 0: # 如果是偶数
continue # 跳过本次循环,不执行下面的 print
print(i)
# 输出:1,3,5,7,9
3. pass:占位符(不执行任何操作)
pass 是一个空语句,仅用于占位,避免语法错误(比如循环体暂时没想好写什么时)。
例子:
for i in range(5):
pass # 这里暂时不写代码,用 pass 占位,不会报错
五、循环的 else 子句(Python 特色)
Python 的循环可以搭配 else 使用,仅当循环 “正常结束”(即没有被 break 中断)时,else 块才会执行。
例子:查找列表中的元素
numbers = [1, 3, 5, 7, 9]
target = 4
for num in numbers:
if num == target:
print(f"找到目标:{target}")
break # 找到后 break,循环非正常结束
else:
# 只有循环正常结束(没被 break)才会执行这里
print(f"未找到目标:{target}")
输出:未找到目标:4(因为 4 不在列表中,循环正常结束)。
六、嵌套循环:循环里套循环
嵌套循环是指在一个循环内部再写另一个循环,外层循环执行一次,内层循环执行完整的一轮。
经典例子:打印 9x9 乘法口诀表
for i in range(1, 10): # 外层循环:控制行(1 到 9)
for j in range(1, i + 1): # 内层循环:控制列(1 到 i)
print(f"{j}x{i}={i*j}\t", end="") # \t 是制表符,end="" 表示不换行
print() # 内层循环结束后换行
输出片段:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
...
七、循环实用技巧
1. enumerate():同时获取索引和元素
遍历列表时,如果需要同时知道元素的索引(位置),可以用 enumerate()。
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
print(f"索引 {index}:{fruit}")
输出:
索引 0:苹果
索引 1:香蕉
索引 2:橙子
2. zip():同时遍历多个可迭代对象
如果需要同时遍历两个或多个列表(比如配对姓名和年龄),可以用 zip()。
names = ["张三", "李四", "王五"]
ages = [20, 25, 30]
for name, age in zip(names, ages):
print(f"{name} 的年龄是 {age}")
输出:
张三 的年龄是 20
李四 的年龄是 25
王五 的年龄是 30
3. 列表推导式:用一行代码生成列表(循环的简化版)
列表推导式是 Python 中快速生成列表的语法,本质是 for 循环的简化。
语法:
[表达式 for 变量 in 可迭代对象 if 条件]
例子 1:生成 1 到 10 的平方列表
# 普通写法
squares = []
for i in range(1, 11):
squares.append(i ** 2)
# 列表推导式写法(一行搞定)
squares = [i ** 2 for i in range(1, 11)]
print(squares) # 输出:[1,4,9,16,25,36,49,64,81,100]
例子 2:生成 1 到 10 中的偶数平方列表
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares) # 输出:[4,16,36,64,100]
八、综合练习:统计文本中单词出现次数
现在用所学知识写一个实用程序:统计一段文本中每个单词的出现次数。
text = "hello world hello python world python python"
# 1. 将文本按空格分割成单词列表
words = text.split() # split() 默认按空格分割
# 2. 初始化空字典,用于存储“单词: 次数”
word_count = {}
# 3. 遍历单词列表,统计次数
for word in words:
if word in word_count:
# 如果单词已在字典中,次数加 1
word_count[word] += 1
else:
# 如果单词不在字典中,添加并设次数为 1
word_count[word] = 1
# 4. 打印结果
for word, count in word_count.items():
print(f"'{word}' 出现了 {count} 次")
输出:
'hello' 出现了 2 次
'world' 出现了 2 次
'python' 出现了 3 次
总结
for 循环:适合遍历可迭代对象(列表、字符串等)或已知循环次数的场景,常搭配 range() 使用。
while 循环:适合条件控制的循环,注意避免无限循环(除非用 break 终止)。
控制语句:break 终止循环,continue 跳过当前循环,pass 占位。
else 子句:仅当循环正常结束(未被 break 中断)时执行。
实用技巧:enumerate() 取索引,zip() 同时遍历多个对象,列表推导式简化代码。
需要我帮你针对某个具体场景写循环代码吗?比如批量处理文件、数据筛选等