循环语句 for/while
学习 for 循环和 while 循环,掌握 break、continue 控制
循环语句
循环让程序自动重复执行一段代码。Python 有两种循环:for 和 while。
学完本章你将掌握: for 遍历序列、range()、while 条件循环、break/continue 控制、for-else 特殊语法。
一、for 循环——遍历每个元素
python
fruits = ["苹果", "香蕉", "橘子", "葡萄"]
# 基本遍历
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 遍历字符串
for char in "Hello":
print(char, end=" ") # H e l l o
Python 中几乎任何序列都可以用 for 遍历:
python
# 遍历列表
for n in [1, 2, 3]:
print(n)
# 遍历元组
for color in ("红", "绿", "蓝"):
print(color)
# 遍历字典(后面会详讲)
person = {"name": "小明", "age": 20}
for key in person:
print(f"{key}: {person[key]}")
二、range()——生成数字序列
python
# range(stop):0 到 stop-1
for i in range(5):
print(i, end=" ") # 0 1 2 3 4
print()
# range(start, stop):start 到 stop-1
for i in range(2, 7):
print(i, end=" ") # 2 3 4 5 6
print()
# range(start, stop, step):带步长
for i in range(0, 10, 2):
print(i, end=" ") # 0 2 4 6 8
print()
# 倒序
for i in range(10, 0, -1):
print(i, end=" ") # 10 9 8 7 6 5 4 3 2 1
💡 range 不占内存:
range(1000000)不是一个包含一百万个数的列表,而是一个按需生成数字的对象,几乎不占内存。
三、for + enumerate——同时获取索引和值
python
fruits = ["苹果", "香蕉", "橘子"]
# 只遍历元素
for fruit in fruits:
print(fruit)
# 同时获取索引(从0开始)
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
# 0: 苹果
# 1: 香蕉
# 2: 橘子
# 从指定序号开始
for i, fruit in enumerate(fruits, start=1):
print(f"第{i}个: {fruit}")
四、for + zip——同时遍历多个列表
python
names = ["小明", "小红", "小刚"]
scores = [85, 92, 78]
grades = ["B", "A", "C"]
for name, score, grade in zip(names, scores, grades):
print(f"{name}: {score}分 ({grade})")
# 长度不同时,按最短的来
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c"]
for x, y in zip(a, b):
print(x, y) # 只输出 3 对
五、while 循环——当条件为真时重复
python
count = 1
while count <= 5:
print(f"第 {count} 次")
count += 1
# 常见用法:不知道循环次数时
import random
target = random.randint(1, 100)
guess = 0
attempts = 0
while guess != target:
guess = random.randint(1, 100)
attempts += 1
print(f"猜了 {attempts} 次才猜中 {target}")
⚠️ 小心死循环:
while True如果没有break退出条件,会永远运行下去。调试时可以按 Ctrl+C 强制终止。
六、break——立即退出循环
python
# 找到第一个偶数就停
for i in range(1, 11):
if i % 2 == 0:
print(f"第一个偶数是 {i}")
break
# break 只退出最内层循环
for i in range(3):
for j in range(3):
if j == 1:
break
print(f"({i},{j})", end=" ")
# (0,0) (1,0) (2,0) — 每次 j==1 就退出内层,但不影响外层
七、continue——跳过本次循环
python
# 只打印奇数
for i in range(10):
if i % 2 == 0: # 偶数就跳过
continue
print(i, end=" ") # 1 3 5 7 9
八、for-else / while-else(Python 特有)
python
# else 在循环正常结束后执行(不被 break 打断时)
for i in range(5):
print(i, end=" ")
else:
print("→ 循环正常完成")
# 被 break 打断则不执行 else
for i in range(10):
if i == 5:
break
print(i, end=" ")
else:
print("→ 这句不会执行") # break 导致 else 被跳过
实用场景——查找元素:
python
def find_student(name, students):
for s in students:
if s["name"] == name:
print(f"找到了:{s}")
break
else:
print(f"没有找到 {name}")
students = [{"name": "小明", "score": 85}, {"name": "小红", "score": 92}]
find_student("小红", students) # 找到了
find_student("小刚", students) # 没有找到
💡 for-else 是 Python 的特色语法:当
for循环不是被break终止时,会执行else块。这在查找操作中特别有用。
九、嵌套循环
python
# 打印乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
十、循环中的常见模式
python
# 累加
total = 0
for n in range(1, 101):
total += n
print(f"1到100的和: {total}")
# 计数
vowels = 0
for c in "Hello World, Hello Python":
if c.lower() in "aeiou":
vowels += 1
print(f"元音字母数: {vowels}")
# 找最大值
nums = [3, 7, 2, 9, 1, 5]
max_val = nums[0]
for n in nums:
if n > max_val:
max_val = n
print(f"最大值: {max_val}")
小结
for ... in ...遍历序列元素range(n)生成数字序列,支持步长和倒序enumerate同时获取索引,zip同时遍历多个列表while条件循环,不要忘了更新条件避免死循环break退出循环,continue跳过本次for-else在未 break 时执行
小练习
- 用 for 循环输出 1 到 100 中所有能被 3 和 5 同时整除的数
- 用 while 循环计算 2 的多少次方首次超过 10000
- 用 for-else 写一个"判断一个数是否为质数"的程序
💬 下一章预告:学完循环,下一章深入学习列表——Python 最常用的数据结构。