Z
ZHANK
编程在线教程Python 教程循环语句 for/while
流程控制

循环语句 for/while

学习 for 循环和 while 循环,掌握 break、continue 控制

循环语句

循环让程序自动重复执行一段代码。Python 有两种循环:forwhile

学完本章你将掌握: 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}")

小结

  1. for ... in ... 遍历序列元素
  2. range(n) 生成数字序列,支持步长和倒序
  3. enumerate 同时获取索引,zip 同时遍历多个列表
  4. while 条件循环,不要忘了更新条件避免死循环
  5. break 退出循环,continue 跳过本次
  6. for-else 在未 break 时执行

小练习

  1. 用 for 循环输出 1 到 100 中所有能被 3 和 5 同时整除的数
  2. 用 while 循环计算 2 的多少次方首次超过 10000
  3. 用 for-else 写一个"判断一个数是否为质数"的程序

💬 下一章预告:学完循环,下一章深入学习列表——Python 最常用的数据结构。