GEEK
← 返回首页

循环(Loop)是如何工作的?

#随笔

循环(Loop)是一种让程序重复执行某段代码的控制结构。Python 中最常见的两种循环是 for 和 while:for 主要用于依次处理可迭代对象中的元素,while 则会在条件为 True 时持续执行。除此之外,还可以使用 break 提前结束循环、continue 跳过当前这次循环,以及使用循环的 else 子句处理“循环正常结束”的情况。

什么是循环(Loop)?

假设我们需要连续打印 5 次:

print("Hello")
print("Hello")
print("Hello")
print("Hello")
print("Hello")

虽然可以这样写,但代码非常重复。

如果需要打印 100 次呢?

显然不应该手动写 100 行代码。

这时候就可以使用:

循环(Loop)

循环的核心思想就是:

让程序自动重复执行一段代码。

例如:

开始
 ↓
执行代码
 ↓
检查条件
 ↓
需要继续? ── 是 ──→ 再次执行
 ↓ 否
结束

Python 中主要有两种循环:

循环 主要用途
for 遍历一组数据
while 条件满足时重复执行

for 循环

for 是 Python 中最常用的循环之一。

它通常用于:

依次访问一个可迭代对象(Iterable)中的每个元素。

例如列表:

programming_languages = ["Rust", "Java", "Python", "C++"]

for language in programming_languages:
    print(language)

输出:

Rust
Java
Python
C++

for 循环是怎么工作的?

先看这段代码:

programming_languages = ["Rust", "Java", "Python", "C++"]

for language in programming_languages:
    print(language)

可以拆开理解:

programming_languages
        ↓
["Rust", "Java", "Python", "C++"]
        ↓
取出 "Rust"
        ↓
language = "Rust"
        ↓
print(language)
        ↓
取出 "Java"
        ↓
language = "Java"
        ↓
print(language)
        ↓
……

最终每个元素都会被处理一次。

因此:

for language in programming_languages:

可以理解成:

programming_languages 中依次取出元素,并把当前元素暂时保存到 language 变量中。


for 循环的基本语法

基本结构:

for 变量 in 可迭代对象:
    要重复执行的代码

例如:

for number in [1, 2, 3]:
    print(number)

这里:

部分 含义
for 表示开始 for 循环
number 当前正在处理的元素
in 从某个对象中依次获取元素
[1, 2, 3] 被遍历的对象
: 表示循环代码块开始
缩进代码 每次循环都会执行

什么是遍历(Iteration)?

在学习循环时,经常会遇到一个词:

遍历(Iteration)

它可以简单理解为:

按照一定顺序,一个一个地访问数据中的元素。

例如:

numbers = [10, 20, 30]

遍历它:

for number in numbers:
    print(number)

实际上就是:

第一次 → 10
第二次 → 20
第三次 → 30

每执行一次循环,就叫做一次:

迭代(Iteration)


Python 的缩进非常重要

注意:

for language in programming_languages:
    print(language)

这里:

    print(language)

前面有缩进。

这个缩进表示:

print(language) 属于 for 循环的代码块。

Python 使用**缩进(Indentation)**来表示代码之间的层级关系。

如果没有正确缩进:

for language in programming_languages:
print(language)

就会产生:

IndentationError

类似:

IndentationError: expected an indented block

意思是:

for 后面应该有一个缩进的代码块。

通常推荐使用 4 个空格进行缩进:

for language in programming_languages:
    print(language)

for 循环不仅可以遍历列表

for 不仅可以遍历列表。

只要对象是可迭代对象(Iterable),通常都可以使用 for 进行遍历。

例如字符串。

for char in "code":
    print(char)

输出:

c
o
d
e

这是因为字符串也可以被一个字符一个字符地访问:

"code"
 ↓
c
o
d
e

因此:

for char in "code":

可以理解为:

每次取出字符串中的一个字符,并把它保存到 char 中。


变量名可以自己决定

下面这些写法都是可以的:

for language in programming_languages:
    print(language)

也可以:

for item in programming_languages:
    print(item)

甚至:

for x in programming_languages:
    print(x)

变量名本身没有强制要求。

不过推荐使用有意义的变量名

例如遍历语言:

for language in programming_languages:

比:

for x in programming_languages:

更容易理解。


嵌套 for 循环

Python 允许在一个循环里面再放一个循环。

这种结构叫:

嵌套循环(Nested Loop)

例如:

categories = ["Fruit", "Vegetable"]
foods = ["Apple", "Carrot", "Banana"]

for category in categories:
    for food in foods:
        print(category, food)

输出:

Fruit Apple
Fruit Carrot
Fruit Banana
Vegetable Apple
Vegetable Carrot
Vegetable Banana

嵌套循环是怎么执行的?

这里有两个循环:

for category in categories:
    for food in foods:
        print(category, food)

外层循环:

for category in categories:

负责遍历:

Fruit
Vegetable

内层循环:

for food in foods:

负责遍历:

Apple
Carrot
Banana

执行过程可以理解成:

category = "Fruit"
    ↓
遍历全部 foods
    ↓
Fruit Apple
Fruit Carrot
Fruit Banana

category = "Vegetable"
    ↓
再次遍历全部 foods
    ↓
Vegetable Apple
Vegetable Carrot
Vegetable Banana

所以:

外层循环执行一次,内层循环会完整执行一遍。


while 循环

Python 中另外一种常见循环是:

while

while 的意思可以理解成:

只要条件成立,就继续执行。

基本语法:

while 条件:
    要重复执行的代码

例如:

number = 1

while number <= 5:
    print(number)
    number += 1

输出:

1
2
3
4
5

while 循环是怎么工作的?

程序会不断检查:

number <= 5

如果结果是:

True

就执行循环里面的代码。

执行完成后,再次检查条件。

流程:

number = 1
    ↓
1 <= 5?
    ↓
True
    ↓
打印 1
    ↓
number = 2
    ↓
2 <= 5?
    ↓
True
    ↓
打印 2
    ↓
……
    ↓
number = 6
    ↓
6 <= 5?
    ↓
False
    ↓
循环结束

因此 while 循环的核心就是:

检查条件
 ↓
True → 执行代码 → 再检查
 ↓
False
 ↓
结束循环

while 循环中的条件必须能够发生变化

例如:

number = 1

while number <= 5:
    print(number)

这段代码存在一个问题:

number

始终是:

1

所以:

number <= 5

永远是:

True

循环就不会停止。

这种情况叫:

无限循环(Infinite Loop)

因此使用 while 时,需要确保循环条件最终能够变成 False

例如:

number = 1

while number <= 5:
    print(number)
    number += 1

这里:

number += 1

会让 number 不断增加。

最终:

number = 6

条件:

number <= 5

变成:

False

循环就结束了。


while 循环示例:猜数字游戏

while 非常适合处理:

不知道需要循环多少次,但知道什么时候应该停止。

例如猜数字游戏:

secret_number = 3
guess = 0

while guess != secret_number:
    guess = int(input("Guess the number (1-5): "))

    if guess != secret_number:
        print("Wrong! Try again.")

print("You got it!")

运行过程可能是:

Guess the number (1-5): 2
Wrong! Try again.

Guess the number (1-5): 1
Wrong! Try again.

Guess the number (1-5): 3
You got it!

这里:

while guess != secret_number:

意思是:

只要猜测结果不等于正确答案,就继续循环。

当用户输入:

3

此时:

guess != secret_number

就变成:

3 != 3

结果:

False

于是循环结束。


为什么这里需要 int()?

input() 获取的数据默认是:

str

也就是字符串。

例如用户输入:

3

实际上:

input()

得到的是:

"3"

而不是:

3

所以代码使用:

guess = int(input("Guess the number (1-5): "))

把字符串:

"3"

转换成整数:

3

这样才能和:

secret_number = 3

进行数字比较。


break:立即结束循环

Python 提供了:

break

语句。

break 的作用是:

立即结束当前循环。

例如:

developer_names = ["Jess", "Naomi", "Tom"]

for developer in developer_names:
    if developer == "Naomi":
        break

    print(developer)

输出:

Jess

break 是怎么工作的?

循环开始:

Jess
 ↓
不是 Naomi
 ↓
打印 Jess

Naomi
 ↓
是 Naomi
 ↓
break
 ↓
立即结束循环

因此:

Tom

根本不会被处理。

可以把 break 理解成:

“不管后面还有没有数据,现在立刻停止循环。”


continue:跳过当前循环

break 不同:

continue

不会结束整个循环。

它的作用是:

跳过当前这一次循环,直接进入下一次迭代。

例如:

developer_names = ["Jess", "Naomi", "Tom"]

for developer in developer_names:
    if developer == "Naomi":
        continue

    print(developer)

输出:

Jess
Tom

continue 是怎么工作的?

执行过程:

Jess
 ↓
不是 Naomi
 ↓
打印 Jess

Naomi
 ↓
是 Naomi
 ↓
continue
 ↓
跳过这一次
 ↓
继续下一次

Tom
 ↓
不是 Naomi
 ↓
打印 Tom

所以:

break
 ↓
直接结束循环

continue
 ↓
跳过当前这次
 ↓
继续下一次

这是两者最重要的区别。


break 和 continue 的区别

语句 作用
break 立即结束整个循环
continue 跳过当前迭代,继续下一次

可以这样记:

break
 ↓
“别循环了,结束!”

continue
 ↓
“这次跳过,下一次继续!”

循环中的 else

Python 的 forwhile 循环还有一个比较特别的语法:

else

循环中的 else 和普通的:

if ... else

有一点不同。

对于循环来说:

如果循环正常结束,并且没有被 break 打断,就会执行 else

例如:

numbers = [1, 2, 3]

for number in numbers:
    print(number)
else:
    print("循环结束")

输出:

1
2
3
循环结束

因为循环正常执行完了,没有使用 break


break 会影响循环的 else

例如:

numbers = [1, 2, 3]

for number in numbers:
    if number == 2:
        break

    print(number)
else:
    print("循环正常结束")

输出:

1

这里:

break

提前结束了循环。

因此:

else

不会执行。

所以可以记成:

正常结束
   ↓
执行 else

break 结束
   ↓
不执行 else

循环 else 的实际应用

循环 else 一个很典型的用途是:

搜索某个元素,并在整个循环都没有找到时执行某些代码。

例如,我们想判断一个单词中是否包含元音字母。

先准备一些单词:

words = ["sky", "apple", "rhythm", "fly", "orange"]

元音包括:

a
e
i
o
u

可以这样写:

for word in words:
    for letter in word:
        if letter.lower() in "aeiou":
            print(f"'{word}' contains the vowel '{letter}'")
            break
    else:
        print(f"'{word}' has no vowels")

输出:

'sky' has no vowels
'apple' contains the vowel 'a'
'rhythm' has no vowels
'fly' has no vowels
'orange' contains the vowel 'o'

这个例子是怎么工作的?

这里有两个 for 循环:

for word in words:
    for letter in word:

外层循环负责:

一个一个处理单词

内层循环负责:

一个一个检查单词中的字母

例如:

apple

会被拆成:

a
p
p
l
e

首先检查:

a

发现:

a

属于:

aeiou

于是执行:

print(f"'{word}' contains the vowel '{letter}'")

然后:

break

结束内层循环


为什么 sky 会执行 else?

来看:

sky
 ↓
s → 不是元音
 ↓
k → 不是元音
 ↓
y → 不是元音
 ↓
内层循环正常结束
 ↓
执行 else

所以输出:

'sky' has no vowels

这里非常关键:

else 属于紧挨着它的那个 for 循环。

也就是:

for letter in word:
    ...
else:
    ...

它表示:

如果这个内层 for 循环没有因为 break 结束,就执行 else


为什么 apple 不执行 else?

对于:

apple

检查到:

a

时就找到了元音。

于是:

break

立即结束内层循环。

因此:

else:

不会执行。

最终:

'apple' contains the vowel 'a'

而不会出现:

'apple' has no vowels

for 和 while 应该怎么选择?

这是初学者经常遇到的问题。

可以先这样理解:

已经知道要遍历什么

使用:

for

例如:

languages = ["Python", "Java", "Rust"]

for language in languages:
    print(language)

这里非常明确:

把列表中的每个元素都处理一次。


不知道循环多少次,只知道什么时候停止

使用:

while

例如:

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

这里并不知道用户需要输入多少次。

只知道:

密码正确
 ↓
停止

所以 while 更合适。


for 和 while 对比

特点 for while
常见用途 遍历数据 根据条件重复
循环次数 通常比较明确 通常不确定
常见对象 列表、字符串等可迭代对象 布尔条件
是否需要手动更新条件 通常不需要 通常需要
常见风险 较少 容易出现无限循环

可以简单记:

for
 ↓
“把这些东西一个个处理完”

while
 ↓
“只要条件满足,就继续做”

循环中的常见错误

❌ 忘记缩进

错误:

for number in [1, 2, 3]:
print(number)

正确:

for number in [1, 2, 3]:
    print(number)

Python 使用缩进表示代码块,因此缩进非常重要。


❌ while 条件永远为 True

例如:

number = 1

while number <= 5:
    print(number)

因为 number 从来没有变化:

number 永远是 1

所以:

1 <= 5

永远为 True

应该修改:

number = 1

while number <= 5:
    print(number)
    number += 1

❌ 把 continue 当成 break

例如:

for number in [1, 2, 3]:
    if number == 2:
        continue

    print(number)

输出:

1
3

continue 只是跳过 2

如果使用:

break

则会变成:

1

因为循环直接结束。


循环核心知识速查表

概念 作用
for 遍历可迭代对象
while 条件为 True 时重复执行
for ... in ... 依次获取可迭代对象中的元素
break 立即结束当前循环
continue 跳过当前迭代
else 循环没有被 break 终止时执行
嵌套循环 一个循环内部再放一个循环
Indentation 使用缩进表示代码块

学习小结

学习循环时,首先掌握这几个核心概念:

1. for

for item in items:
    print(item)

用于依次处理一组数据。

2. while

while condition:
    # 重复执行

只要条件为 True,就继续执行。

3. break

break

立即结束当前循环。

4. continue

continue

跳过当前这一次循环,继续下一次。

5. 循环 else

for item in items:
    ...
else:
    ...

如果循环没有因为 break 而提前结束,就会执行 else


总结

  • 循环(Loop) 用于让程序重复执行某段代码。
  • Python 中最常见的循环是 forwhile
  • for 循环通常用于遍历列表、字符串等可迭代对象。
  • while 循环会在条件为 True 时持续执行。
  • Python 使用**缩进(Indentation)**表示循环内部的代码块。
  • 一个循环内部还可以放另一个循环,这叫嵌套循环(Nested Loop)
  • break 用于立即结束当前循环。
  • continue 用于跳过当前这一次迭代,然后继续下一次循环。
  • forwhile 都可以使用 else,当循环没有被 break 提前结束时,else 才会执行。
  • 使用 while 时尤其要注意循环条件是否能够最终变成 False,否则可能产生无限循环(Infinite Loop)

记住:for 是“一个个处理”,while 是“满足条件就继续”,break 是“直接结束”,continue 是“这次跳过”。