第6关:循环语句——让Python告别"重复劳动"
6.1 核心概念:循环是Python的"高效打工人"
家人们,有没有遇到过"需要重复做一件事"的场景?比如打印10遍"我爱Python"、计算1到100的和、遍历列表里的所有元素——如果手动写10遍打印代码、逐个计算加法,不仅累还容易错,这时候"循环语句"就该登场了!
循环语句堪称Python里的**"高效打工人"**,能让电脑自动重复执行一段代码,直到满足停止条件,不用你一遍遍手动操作。就像让机器人帮你叠衣服:设定好"叠完所有衣服就停止",机器人会自动重复"拿起衣服-折叠-放好"的动作,你只需要坐享其成。
| 循环类型 | 适用场景 | 记忆口诀 |
|---------|---------|---------|
| `for`循环 | 知道要重复多少次,或遍历容器 | "按清单办事" |
| `while`循环 | 不知道次数,但知道停止条件 | "不达目的不罢休" |
⚠️ 新手避坑:循环不是"无限重复",必须有明确的"停止条件",否则会变成"死循环"(比如让电脑一直打印"Hello",停不下来,只能强制关闭程序)!
`for`循环就像"按清单做事"——先明确要处理的"清单"(比如列表、字符串、range对象),然后逐个处理清单里的每个元素,处理完所有元素就自动停止,逻辑清晰到不用费脑。
不用手动计数,直接遍历容器里的每个元素:
1. 遍历列表
```python
shopping_list = ["牛奶", "面包", "鸡蛋", "苹果"]
for item in shopping_list:
print(f"需要买:{item}")
```
💡 代码逻辑:`item`是"临时变量",每次循环自动取列表里的一个元素,遍历完自动停止。
2. 遍历字符串
```python
word = "Python"
for char in word:
print(char)
```
输出:"P""y""t""h""o""n",逐个字符处理。
3. 遍历字典
```python
student = {"name": "张三", "age": 25, "score": 95}
for key, value in student.items():
print(f"{key}:{value}")
```
比手动取值高效10倍!
6.2.2 range()函数:循环的"次数控制器"
想让循环执行固定次数?用`range()`生成数字清单:
| 用法 | 示例 | 生成结果 | 循环次数 |
|-----|------|---------|---------|
| range(结束值) | `range(5)` | [0,1,2,3,4] | 5次 |
| range(起始,结束) | `range(1,6)` | [1,2,3,4,5] | 5次 |
| range(起,终,步长) | `range(1,10,2)` | [1,3,5,7,9] | 5次 |
实战示例1:打印5遍"我爱Python"
```python
for i in range(5):
print("我爱Python")
```
实战示例2:计算1到10的和
```python
total = 0
for i in range(1, 11):
total += i # 相当于total = total + i
print(f"1到10的和是:{total}") # 输出55
```
实战示例3:打印1到10的奇数
```python
for i in range(1, 11, 2):
print(i) # 输出1、3、5、7、9
```
- 步长不能为0,否则会报`ValueError`(相当于让循环"原地踏步")
`while`循环就像"不达目的不罢休"的执着选手——只要满足设定的"条件",就一直重复执行代码,直到条件不成立才停止。
```python
count = 1
while count <= 5:
print(f"加油!第{count}次")
count += 1 # 必须更新条件变量!
```
输出5次"加油!"后停止。
🔥 新手必踩坑:忘记更新条件变量!少了`count +=1`,条件永远满足,变成**死循环**,只能强制关闭程序!
记住:`while`循环必须有"让条件最终不成立"的代码,否则会"累死"电脑!
案例:密码验证(直到输入正确为止)
```python
correct_password = "123456"
password = input("请输入密码:")
while password != correct_password:
print("密码错误,请重新输入!")
password = input("请输入密码:")
print("密码正确,欢迎登录!")
```
输错3次或10次都没关系,直到输入正确才停止,比`for`循环更灵活。
6.4 循环进阶:break、continue与嵌套循环
找到目标就终止循环,不再继续遍历。
示例:找到"鸡蛋"就停止
```python
shopping_list = ["牛奶", "面包", "鸡蛋", "苹果"]
for item in shopping_list:
if item == "鸡蛋":
print(f"找到目标:{item}")
break # 直接终止,后面的"苹果"不再遍历
print(f"正在查找:{item}")
```
输出:
```
正在查找:牛奶
正在查找:面包
找到目标:鸡蛋
```
6.4.2 continue:跳过当前,"下一轮见"
跳过当前循环的剩余代码,直接开始下一轮。
示例:打印1到10的偶数,跳过奇数
```python
for i in range(1, 11):
if i % 2 == 1: # 如果是奇数
continue # 跳过打印,直接下一轮
print(f"偶数:{i}")
```
💡 **break vs continue 对比**
- `continue` = 跳过当前轮次(跳过这个任务)
经典案例:打印九九乘法表
```python
for i in range(1, 10): # 外层:控制行数(1到9行)
for j in range(1, i+1): # 内层:控制每行列数
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
```
⚠️ 新手踩坑点:缩进要区分!外层缩进4个空格,内层缩进8个空格,否则会报`IndentationError`。
| 坑点 | 后果 | 解决方案 |
|-----|------|---------|
| 死循环 | 程序卡死,需强制关闭 | 确保条件最终会不成立 |
| 缩进混乱 | `IndentationError` | 统一用2或4个空格,不能混用 |
| 嵌套太深 | 代码难懂,效率低 | 超过3层就拆分 |
| 滥用break/continue | 逻辑混乱 | 确实需要再用 |
| 知识点 | 核心记忆点 | 适用场景 |
|-------|-----------|---------|
| for循环 | 遍历容器,自动停止 | 按清单办事、已知次数 |
| while循环 | 条件满足就一直干 | 未知次数、条件驱动 |
| range() | 生成数字序列控制次数 | 固定次数循环 |
| break | 强制终止整个循环 | 找到目标提前结束 |
| continue | 跳过当前轮次 | 过滤某些情况 |
| 嵌套循环 | 外层+内层组合 | 二维数据处理、表格打印 |
闯关成功! 现在你已经掌握了让Python"自动重复干活"的核心技能,下一关我们将解锁"函数"——学会把代码打包成"工具箱",随用随取!