跳到主要内容

Python 循环

循环是编程中最强大的概念之一,它允许我们重复执行一段代码,直到满足特定条件为止。在Python中,循环结构使我们能够自动化和重复任务,极大提高了代码的效率和简洁性。

为什么需要循环?

想象一下,如果你需要打印数字1到100,没有循环的话,你可能需要编写100行代码。但有了循环,只需几行代码就能完成:

python
for i in range(1, 101):
print(i)

Python 中的循环类型

Python提供了两种主要的循环类型:

  1. for循环:用于迭代序列(如列表、元组、字典、集合或字符串)
  2. while循环:当条件为真时重复执行代码块

让我们深入了解这两种循环。

For循环

基本语法

python
for 变量 in 序列:
# 循环体

这里的"序列"可以是任何可迭代对象,"变量"会在每次迭代中获取序列中的下一个值。

示例1:遍历列表

python
fruits = ["苹果", "香蕉", "樱桃"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")

输出:

我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃樱桃

示例2:使用range()函数

range()函数是for循环的常见搭配,它生成一个数字序列:

python
# 打印1到5的数字
for i in range(1, 6): # 范围是1到5(不包括6)
print(i)

输出:

1
2
3
4
5

range()函数有三种使用形式:

  • range(stop): 从0开始,到stop-1结束
  • range(start, stop): 从start开始,到stop-1结束
  • range(start, stop, step): 从start开始,到stop-1结束,步长为step

示例3:遍历字符串

python
for char in "Python":
print(char)

输出:

P
y
t
h
o
n

示例4:使用enumerate()获取索引

如果你需要同时访问元素及其索引:

python
fruits = ["苹果", "香蕉", "樱桃"]
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")

输出:

索引 0: 苹果
索引 1: 香蕉
索引 2: 樱桃

While循环

基本语法

python
while 条件:
# 循环体

只要条件为True,循环体就会一直执行。

示例1:基础while循环

python
count = 1
while count <= 5:
print(count)
count += 1 # 不要忘记更新条件,否则会陷入无限循环

输出:

1
2
3
4
5
警告

使用while循环时,请确保循环条件最终会变为False,否则会创建一个无限循环,导致程序无法正常结束。

示例2:带条件退出的循环

python
# 让用户猜测一个数字,直到猜对为止
secret_number = 7
guess = 0

while guess != secret_number:
guess = int(input("猜一个1到10之间的数字: "))
if guess == secret_number:
print("恭喜,你猜对了!")
else:
print("再试一次!")

循环控制语句

Python提供了几种控制循环执行的语句:

1. break语句

break语句用于完全退出循环:

python
for i in range(1, 10):
if i == 5:
break
print(i)

输出:

1
2
3
4

2. continue语句

continue语句跳过当前迭代,继续下一次迭代:

python
for i in range(1, 6):
if i == 3:
continue
print(i)

输出:

1
2
4
5

3. else子句

循环可以带有else子句,当循环正常完成(不是通过break退出)时执行:

python
for i in range(1, 5):
print(i)
else:
print("循环正常完成!")

输出:

1
2
3
4
循环正常完成!

而当循环通过break退出时,else块不会执行:

python
for i in range(1, 5):
if i == 3:
break
print(i)
else:
print("循环正常完成!") # 不会执行

输出:

1
2

嵌套循环

循环内部可以包含其他循环,称为嵌套循环。外部循环每执行一次,内部循环将完整执行一次。

python
# 打印一个小乘法表
for i in range(1, 5):
for j in range(1, 5):
print(f"{i} x {j} = {i*j}", end="\t")
print() # 换行

输出:

1 x 1 = 1	1 x 2 = 2	1 x 3 = 3	1 x 4 = 4	
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16

列表推导式 - 循环的简洁形式

列表推导式是Python的一个强大特性,它提供了一种创建列表的简洁方式:

python
# 创建1到10的平方列表
squares = [x**2 for x in range(1, 11)]
print(squares)

输出:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

还可以添加条件:

python
# 只获取偶数的平方
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)

输出:

[4, 16, 36, 64, 100]

实际应用案例

案例1:文件处理

循环常用于处理文件内容:

python
# 假设我们有一个名为'data.txt'的文件
with open('data.txt', 'r') as file:
for line in file:
# 处理每一行
print(line.strip()) # strip()移除行尾的换行符

案例2:数据分析

计算一组数的统计信息:

python
numbers = [10, 25, 33, 46, 57, 62, 75, 81, 94]

# 计算总和、平均值、最大值和最小值
total = 0
maximum = numbers[0] # 假设第一个元素是最大值
minimum = numbers[0] # 假设第一个元素是最小值

for num in numbers:
total += num
if num > maximum:
maximum = num
if num < minimum:
minimum = num

average = total / len(numbers)

print(f"总和: {total}")
print(f"平均值: {average}")
print(f"最大值: {maximum}")
print(f"最小值: {minimum}")

输出:

总和: 483
平均值: 53.666666666666664
最大值: 94
最小值: 10

案例3:简单游戏循环

游戏开发中常用while循环来控制主游戏循环:

python
import random

# 简单的猜数字游戏
def number_game():
secret = random.randint(1, 100)
attempts = 0
max_attempts = 7

print("我想了一个1到100之间的数字,你有7次机会猜对它。")

while attempts < max_attempts:
try:
guess = int(input(f"尝试 {attempts + 1}/{max_attempts}: 请猜一个数字: "))
attempts += 1

if guess < secret:
print("太小了!")
elif guess > secret:
print("太大了!")
else:
print(f"恭喜!你用了{attempts}次猜对了!")
return
except ValueError:
print("请输入一个有效的数字!")

print(f"游戏结束!正确答案是{secret}。")

# 实际运行游戏需要调用此函数
# number_game()

性能考虑

在处理大量数据时,循环的效率很重要。以下是一些提高循环效率的技巧:

  1. 尽可能将计算放在循环外部
  2. 使用列表推导式代替传统for循环(在适当情况下)
  3. 避免在循环中频繁修改集合(如列表)的大小
  4. 考虑使用迭代器和生成器处理大数据集

总结

循环是Python中最基本也是最强大的控制流结构之一。通过本文,我们学习了:

  • for循环和while循环的基本语法和用法
  • 使用range()函数创建数字序列
  • 循环控制语句:breakcontinueelse
  • 嵌套循环的概念和应用
  • 列表推导式作为循环的简洁替代
  • 循环在实际应用中的几个案例

通过掌握循环,你能够有效地处理重复性任务,使你的代码更加简洁和高效。

练习

要巩固你的理解,尝试以下练习:

  1. 编写一个程序,打印出1到100中所有能被3或5整除的数字。
  2. 创建一个程序,使用嵌套循环打印出一个5x5的乘法表。
  3. 编写一个程序,找出1到1000中的所有完美数(一个数等于它所有的正因子之和,不包括它自己)。
  4. 使用while循环实现一个简单的菜单系统,让用户选择不同的选项。
提示

循环是编程的基础,通过不断练习和应用,你会逐渐掌握如何在实际问题中高效地使用循环。