1. 循环结构概述

循环结构让程序能够重复执行某段代码,直到条件不满足为止。Python 提供了两种循环:

  • while 循环:适合循环次数不确定的场景("满足条件就继续")
  • for-in 循环:适合循环次数确定或遍历序列的场景

2. while 循环

while 循环的基本结构:条件为 True 时持续执行循环体,条件为 False 时退出。

Python
while 条件表达式:
    # 循环体(条件为真时重复执行的代码)
else:
    # 可选部分,当循环正常结束时执行(非 break 退出)
注意:循环体中必须有更新条件变量的语句,否则会形成无限循环(死循环)!
Python
# 重复输出10次
i = 0
while i < 10:
    print("我爱Python")
    i = i + 1    # 别忘了更新条件变量!

# 输出1到5的数字
i = 1
while i <= 5:
    print(i)
    i += 1

3. for-in 循环

如果明确知道循环执行次数,推荐使用 for-in 循环。循环变量会依次取出序列中的每个值。

Python
# 从0循环到99,共循环100次
for i in range(100):
    print(i)

4. range() 函数

range() 函数用于产生一个整数范围,常与 for-in 配合使用。

写法产生范围说明
range(100)0 ~ 99从0开始,不包含100
range(1, 101)1 ~ 100左闭右开 [1, 101)
range(1, 101, 2)1 3 5 … 99步长为2,所有奇数
range(100, 0, -2)100 98 … 2步长-2,从大到小
Python
# 计算 1+2+3+...+100 的和
total = 0
for i in range(1, 101):
    total += i
print(total)  # 5050

# 更简洁的写法(内置函数 sum)
print(sum(range(1, 101)))  # 5050

# 1到100的偶数之和
print(sum(range(2, 101, 2)))  # 2550

5. break / continue / pass

关键字作用
break立即终止整个循环,跳出循环体
continue跳过本次循环剩余语句,直接进入下一次循环
pass空语句,什么也不做,保持程序结构完整性
Python
i = 0
while i < 10:
    i += 1
    if i == 5:
        continue  # 跳过5,继续执行
    print(i)    # 输出 1 2 3 4 6 7 8 9 10(跳过了5)

6. 嵌套循环

循环结构中可以包含另一个循环,外层循环每执行一次,内层循环会完整执行一轮。

九九乘法表

Python
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{i}×{j}={i * j}', end='\t')
    print()   # 每行结束换行

7. 循环的典型应用

判断素数

素数:只能被1和自身整除的大于1的整数。优化:循环只需到 √n 即可。

Python
num = int(input('请输入一个正整数: '))
end = int(num ** 0.5)
is_prime = True
for i in range(2, end + 1):
    if num % i == 0:
        is_prime = False
        break
if is_prime:
    print(f'{num}是素数')
else:
    print(f'{num}不是素数')

最大公约数(欧几里得算法)

欧几里得算法(辗转相除法)比逐一遍历高效得多:

Python
x = int(input('x = '))
y = int(input('y = '))
while y % x != 0:
    x, y = y % x, x   # 每次用余数替换较大的数
print(f'最大公约数: {x}')

猜数字游戏

Python
import random
answer = random.randint(1, 100)
counter = 0
while True:
    counter += 1
    guess = int(input('猜一猜(1-100): '))
    if guess < answer:
        print('猜小了')
    elif guess > answer:
        print('猜大了')
    else:
        print(f'恭喜你,猜对了!共猜了{counter}次')
        break