什么是循环(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 的 for 和 while 循环还有一个比较特别的语法:
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 中最常见的循环是
for和while。 for循环通常用于遍历列表、字符串等可迭代对象。while循环会在条件为True时持续执行。- Python 使用**缩进(Indentation)**表示循环内部的代码块。
- 一个循环内部还可以放另一个循环,这叫嵌套循环(Nested Loop)。
break用于立即结束当前循环。continue用于跳过当前这一次迭代,然后继续下一次循环。for和while都可以使用else,当循环没有被break提前结束时,else才会执行。- 使用
while时尤其要注意循环条件是否能够最终变成False,否则可能产生无限循环(Infinite Loop)。
记住:
for是“一个个处理”,while是“满足条件就继续”,break是“直接结束”,continue是“这次跳过”。