Skip to content

迭代:for 循环的奥秘

迭代,又称循环 (Looping),是编程中让计算机重复执行某段代码的关键技术。想象一下,你需要打印 1 到 100 的数字,难道要写 100 行 print() 语句吗?循环就能轻松搞定!

Python 提供了 forwhile 这两种循环语句。 让我们聚焦于 for 循环,看看它如何遍历各种数据类型。

for 语句特别擅长遍历序列,如列表 (list)、字符串 (string)、元组 (tuple) 以及 range 对象。 除此之外,它也能遍历集合 (set) 和字典 (dict) 这种无序的数据结构。

下图生动地展示了 for 循环的工作流程:

Python 代码流中的迭代

接下来,我们将通过具体的代码示例,一步步揭开 for 循环的神秘面纱。

列表的循环之旅

代码

python
cars = ["现代", "本田", "福特", "丰田", "宝马", "大众"]
for car in cars:  # 将 cars 列表中的每个元素依次赋值给 car
    print(car)      # 打印当前 car 的值

输出

现代
本田
福特
丰田
宝马
大众

这个例子中,for 循环逐个访问 cars 列表中的汽车品牌,并打印出来。

元组的循环漫步

代码

python
cars = ("现代", "本田", "福特", "丰田", "宝马", "大众")
for car in cars:
    print(car)

输出

现代
本田
福特
丰田
宝马
大众

和列表类似,for 循环可以轻松遍历元组中的每一个元素。

字符串的字符分解

代码

python
name = "python"
for char in name:  # 将 name 字符串中的每个字符依次赋值给 char
    print(char)      # 打印当前 char 的值

输出

p
y
t
h
o
n

字符串可以被看作是字符的序列,for 循环可以逐个访问字符串中的字符。

range() 函数的妙用

range 类型代表一个不可变的数字序列, 它是生成一系列整数的便捷方式。range 对象最大的优势在于,无论它代表的数字范围有多大,它始终只占用少量内存。这使得 range 在需要大量整数序列时,比 listtuple 更加高效。

语法

  • range(stop): 生成从 0 开始,到 stop - 1 的整数序列。
  • range(start, stop[, step]): 生成从 start 开始,到 stop - 1 的整数序列,步长为 step
python
>>> range(10)
range(0, 10)
>>> list(range(10)) # 将 range 对象转换为 list,方便查看
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]

range() 函数常与 for 语句联用,控制循环执行的次数,并提供每次循环的索引值。

示例 #1

打印从 0 到 20 的 5 的倍数。

代码

python
for i in range(5):  # 循环 5 次,i 的值分别为 0, 1, 2, 3, 4
    print(i * 5)    # 打印 i 乘以 5 的结果

输出

0
5
10
15
20

示例 #2

打印从 2 到 5 的所有整数(包含 2 和 5)。

代码

python
for i in range(2, 6):  # 循环从 2 到 5,i 的值分别为 2, 3, 4, 5
    print(i)

输出

2
3
4
5

示例 #3

打印 2 到 10 之间的所有奇数。

代码

python
for i in range(3, 10, 2):  # 从 3 开始,到 9 结束,步长为 2
    print(i)

或者:

python
for i in range(2, 10):
    if i % 2 != 0:  # 判断 i 是否为奇数
        print(i)

输出

3
5
7
9

示例 #4

找出字符串 "python programming" 中所有字母 o 出现的索引位置。

代码

python
s = "python programming"
for i in range(len(s)):  # 循环遍历字符串 s 的所有索引
    if s[i] == "o":    # 如果 s[i] 的字符是 'o'
        print(i)        # 打印索引 i

输出

4
9

动手实践

现在,让我们通过几个实际的编程问题来巩固 for 循环的运用。

1. 计算复利

编写一个程序,计算在给定本金、年利率和投资年限下,所能获得的复利总额。

代码

python
principal = float(input("输入本金金额: "))
rate = float(input("输入年利率: "))
years = int(input("输入投资年限(年): "))

amount = principal  # 初始金额等于本金
for year in range(years):  # 循环遍历每一年
    amount += rate * amount / 100  # 计算每年的利息,并加到总金额上

interest = amount - principal  # 计算总利息
print("应付总利息:", interest)

输出

输入本金金额: 500000
输入年利率: 5
输入投资年限(年): 3
应付总利息: 78812.5

2. 计算阶乘

正整数 n 的阶乘(表示为 n!)等于所有小于或等于 n 的正整数的乘积。 例如,5! = 5 × 4 × 3 × 2 × 1 = 120。 编写一个程序,计算给定正整数 n 的阶乘 (假设 n 大于 0)。

代码

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

factorial = 1  # 阶乘的初始值为 1
for i in range(1, n + 1):  # 从 1 循环到 n
    factorial *= i        # 将每个数字乘到 factorial 上

print("n! :", factorial)

输出

输入 n: 6
n! : 720

通过这些例子,相信你已经对 for 循环有了更深入的理解。 掌握 for 循环,你就能轻松地处理各种重复性的任务,让你的代码更加简洁高效!