循环语句详解
让程序学会重复执行任务
循环概述
循环 让程序重复执行某段代码,直到满足特定条件。
# 没有循环
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}")
本章小结
- for循环:遍历序列,固定次数循环
- while循环:条件循环
- break:跳出循环
- continue:跳过本次
- 嵌套循环:循环中的循环
- 列表推导式:简洁的列表生成方式
下一步
掌握了循环,下一章学习函数。
→ 继续阅读:18-函数基础与进阶