跳到主要内容

循环语句详解

让程序学会重复执行任务

循环概述

循环 让程序重复执行某段代码,直到满足特定条件。

# 没有循环
print("Hello")
print("Hello")
print("Hello")
print("Hello")
print("Hello")

# 使用循环
for i in range(5):
print("Hello")

Python中有两种循环:

  • for循环:遍历序列或固定次数
  • while循环:条件满足时循环

for循环

基本语法

for 变量 in 可迭代对象:
循环体代码

遍历列表

fruits = ["苹果", "香蕉", "橙子"]

for fruit in fruits:
print(fruit)

# 输出:
# 苹果
# 香蕉
# 橙子

遍历字符串

for char in "Python":
print(char)

# 输出:P y t h o n(每个字母一行)

使用range()

# range(stop):0到stop-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4

# range(start, stop):start到stop-1
for i in range(2, 6):
print(i) # 2, 3, 4, 5

# range(start, stop, step):指定步长
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8

# 倒序
for i in range(10, 0, -1):
print(i) # 10, 9, 8, ..., 1

获取索引enumerate()

fruits = ["苹果", "香蕉", "橙子"]

for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")

# 输出:
# 0: 苹果
# 1: 香蕉
# 2: 橙子

# 指定起始索引
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")

同时遍历多个序列zip()

names = ["张三", "李四", "王五"]
ages = [20, 25, 30]

for name, age in zip(names, ages):
print(f"{name}今年{age}岁")

while循环

基本语法

while 条件:
循环体代码

基本示例

count = 0
while count < 5:
print(count)
count += 1

# 输出:0, 1, 2, 3, 4

用户输入验证

password = ""
while password != "123456":
password = input("请输入密码:")
print("密码正确!")

无限循环

# 无限循环(需要用break退出)
while True:
command = input("请输入命令(quit退出):")
if command == "quit":
break
print(f"执行命令:{command}")

循环控制

break:跳出循环

# 找到第一个偶数就退出
for i in range(10):
if i % 2 == 0 and i != 0:
print(f"第一个非零偶数是{i}")
break

# 在while中使用
while True:
answer = input("继续吗?(y/n):")
if answer == "n":
print("再见!")
break

continue:跳过本次

# 跳过偶数,只打印奇数
for i in range(10):
if i % 2 == 0:
continue
print(i)

# 输出:1, 3, 5, 7, 9

pass:占位符

# 暂时不实现,用pass占位
for i in range(5):
if i == 3:
pass # TODO: 之后实现
print(i)

else子句

# 循环正常结束时执行else
# break退出时不执行else

for i in range(5):
print(i)
else:
print("循环正常结束")

# 检查是否找到
for i in range(10):
if i == 15:
print("找到了")
break
else:
print("没找到") # 这个会执行

嵌套循环

基本示例

# 打印乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行

打印图形

# 打印矩形
for i in range(3):
for j in range(5):
print("*", end="")
print()

# 输出:
# *****
# *****
# *****

# 打印三角形
for i in range(1, 6):
print("*" * i)

# 输出:
# *
# **
# ***
# ****
# *****

嵌套循环中的break

# break只跳出最内层循环
for i in range(3):
for j in range(3):
if j == 1:
break
print(f"({i}, {j})")
print(f"外层i={i}继续")

# 要跳出所有循环,可以用标志变量或函数
found = False
for i in range(10):
for j in range(10):
if i * j > 20:
found = True
break
if found:
break

常见循环模式

累加求和

# 计算1到100的和
total = 0
for i in range(1, 101):
total += i
print(total) # 5050

# 更Pythonic的方式
print(sum(range(1, 101))) # 5050

寻找最值

numbers = [23, 45, 12, 67, 34]

# 找最大值
max_val = numbers[0]
for num in numbers:
if num > max_val:
max_val = num
print(f"最大值:{max_val}")

# 更简单
print(max(numbers))

计数

# 统计偶数个数
count = 0
for i in range(1, 101):
if i % 2 == 0:
count += 1
print(f"偶数个数:{count}") # 50

列表过滤

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 筛选偶数
evens = []
for num in numbers:
if num % 2 == 0:
evens.append(num)
print(evens) # [2, 4, 6, 8, 10]

# 列表推导式(更简洁)
evens = [num for num in numbers if num % 2 == 0]

列表推导式

基本语法

# [表达式 for 变量 in 可迭代对象]
squares = [x**2 for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]

# 带条件
# [表达式 for 变量 in 可迭代对象 if 条件]
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]

嵌套推导式

# 二维列表展平
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in matrix for x in row]
print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

常见错误

无限循环

# 错误:忘记更新循环变量
i = 0
while i < 5:
print(i)
# 忘记 i += 1,导致无限循环

# 正确
i = 0
while i < 5:
print(i)
i += 1

修改正在遍历的列表

# 错误:遍历时修改列表
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 危险!

# 正确:使用列表推导式创建新列表
numbers = [1, 2, 3, 4, 5]
numbers = [num for num in numbers if num % 2 != 0]

实战示例

示例1:猜数字游戏

import random

target = random.randint(1, 100)
attempts = 0

while True:
guess = int(input("猜一个1-100的数字:"))
attempts += 1

if guess < target:
print("太小了!")
elif guess > target:
print("太大了!")
else:
print(f"恭喜!你用了{attempts}次猜对了!")
break

示例2:质数判断

num = int(input("请输入一个正整数:"))

if num < 2:
print(f"{num}不是质数")
else:
is_prime = True
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
is_prime = False
break

if is_prime:
print(f"{num}是质数")
else:
print(f"{num}不是质数")

练习

练习1:打印星号金字塔

# 输入层数,打印金字塔
n = 5
# *
# ***
# *****
# *******
# *********

# 参考答案
n = int(input("层数:"))
for i in range(1, n + 1):
print(" " * (n - i) + "*" * (2 * i - 1))

练习2:计算阶乘

# 计算n的阶乘
# n! = 1 × 2 × 3 × ... × n

n = int(input("请输入n:"))

# 参考答案
factorial = 1
for i in range(1, n + 1):
factorial *= i
print(f"{n}! = {factorial}")

本章小结

  1. for循环:遍历序列,固定次数循环
  2. while循环:条件循环
  3. break:跳出循环
  4. continue:跳过本次
  5. 嵌套循环:循环中的循环
  6. 列表推导式:简洁的列表生成方式

下一步

掌握了循环,下一章学习函数。

→ 继续阅读:18-函数基础与进阶