循环结构学习

同学们好!👋

欢迎来到循环结构的学习课程!今天我们将一起探索Python中非常重要的循环概念,掌握for循环和while循环的使用方法。

本节课学习目标

  • 掌握for循环的语法和使用场景,理解range()和enumerate()函数
  • 掌握while循环的语法和条件控制,学会避免无限循环
  • 理解循环控制语句break和continue的区别
  • 学会在实际项目中综合运用循环结构解决问题

学习建议

  • 动手实践:每个知识点后都有即时练习,请务必亲自动手完成,加深理解
  • 循序渐进:按照课程顺序学习,不要跳跃,每个模块都很重要
  • 思考总结:学习过程中多思考"为什么",课后及时总结知识点

💡 编程思维的重要性:循环不仅仅是重复执行代码,更重要的是培养我们解决问题的思维方式。通过循环,我们可以将复杂的问题分解为重复的简单步骤,这正是编程思维的核心。希望同学们在学习过程中,不仅要掌握语法,更要理解循环背后的逻辑思维!

循环结构引入 (5分钟)

学习提示:

想象一下,如果我们要打印100个商品的价格,没有循环的话,我们需要写100行代码!这太繁琐了。循环就像是我们日常生活中的"重复做事"——比如每天重复"起床-吃饭-上学-睡觉"这样的过程。

循环结构在编程中非常重要,它能够让我们用几行代码完成大量重复的工作,大大提高编程效率。下面我们通过对比来看看有无循环的差异。

Python中有两种主要的循环结构:for循环while循环。for循环适合处理已知次数的重复任务(比如遍历一个列表),而while循环适合处理条件满足就继续执行的任务(比如游戏主循环)。让我们一起来看看它们的具体用法吧!

生活实例:购物车结算

购物车
0
商品正在加入购物车...

循环的价值:

  • 重复执行相似任务,避免代码冗余
  • 处理批量数据,如购物清单、学生成绩等
  • 自动完成重复计算,提高编程效率

代码对比

Python中的循环类型

🔄 for 循环

用于遍历序列(如列表、元组、字符串)或可迭代对象

适合:已知循环次数的场景

🔁 while 循环

只要条件为真,就重复执行代码块

适合:未知循环次数的场景

for 循环学习 (15分钟)

学习提示:

for循环是Python中最常用的循环结构,特别适合处理已知次数的重复任务。比如遍历一个列表、处理一批文件、生成特定数量的数据等。for循环的核心思想是"遍历"——就像我们查看购物车里的每一件商品一样。

在学习for循环时,大家要特别注意两个重要函数:range()enumerate()。range()用于生成数字序列,enumerate()用于同时获取索引和元素值。这两个函数在实际编程中非常实用。

另外,请注意Python的缩进规则!循环体必须正确缩进,否则程序会报错。这是Python与其他编程语言的一个重要区别,也是Python代码美观整洁的原因之一。

语法结构

1for 变量 in 可迭代对象:
2 # 循环体(注意缩进)
3 要执行的代码

for循环会依次将可迭代对象中的每个元素赋值给变量,然后执行循环体

range() 函数详解

range(5)

生成 0, 1, 2, 3, 4

从0开始,不包含结束值

range(2, 8)

生成 2, 3, 4, 5, 6, 7

指定起始值和结束值

range(1, 10, 2)

生成 1, 3, 5, 7, 9

指定步长为2

📌 重要概念:左闭右开区间

range()函数遵循"左闭右开"原则,这是一个非常重要的概念!

什么是"左闭右开"?

  • 左闭:起始值包含在序列中(包含起始值)
  • 右开:结束值不包含在序列中(不包含结束值)
range(2, 8) 表示 [2, 8)

数学符号:方括号 [ 表示包含,圆括号 ) 表示不包含

示例1:range(2, 8)

包含起始值:✅ 包含 2

不包含结束值:❌ 不包含 8

结果:2, 3, 4, 5, 6, 7

示例2:range(0, 5)

包含起始值:✅ 包含 0

不包含结束值:❌ 不包含 5

结果:0, 1, 2, 3, 4

💡 记忆技巧:

"从起始值开始,到结束值之前停止" —— 就像数数一样,数到8之前就停止了,所以不包含8。

enumerate() 函数详解

for i, item in enumerate(列表):

同时获取元素的索引和值

i: 索引值(从0开始),item: 当前元素值

1fruits = ['苹果', '香蕉', '橙子']
2for i, fruit in enumerate(fruits):
3 print(f"第{i+1}个水果是: {fruit}")

enumerate()的优点:

  • 同时获取索引和元素值,无需手动维护计数器
  • 代码更简洁,可读性更好
  • 在需要索引信息时非常有用

练习:补全enumerate()循环代码

未完成

请补全下面的代码,使用enumerate()函数遍历水果列表:

1fruits = ['苹果', '香蕉', '橙子']
2for in :
3 print(f"第{i+1}个水果是: {fruit}")

循环控制语句:break 和 continue

break 语句

立即跳出循环,不再执行循环体内剩余的代码

1for i in range(10):
2 if i == 5:
3 break # 当i=5时跳出循环
4 print(i)
5# 输出: 0 1 2 3 4

continue 语句

跳过本次循环的剩余代码,继续下一次循环

1for i in range(10):
2 if i % 2 == 0:
3 continue # 跳过偶数
4 print(i)
5# 输出: 1 3 5 7 9 (只输出奇数)

📝 区别总结:

  • break:完全终止循环,循环结束,不再执行任何循环迭代
  • continue:跳过当前迭代,继续执行下一次循环
  • 记忆技巧:break = 彻底停止;continue = 跳过当前,继续下一个

交互演示:遍历购物车

1# 点击运行按钮查看效果

即时练习

练习1:补全for循环遍历列表

未完成
1fruits = ['苹果', '香蕉', '橙子', '葡萄']
2for in fruits:
3 print(f"我喜欢吃{item}")

练习2:使用range()生成序列

未完成
1for i in :
2 print(i)
3# 目标:输出 2, 4, 6, 8

while 循环学习 (15分钟)

学习提示:

while循环与for循环的区别在于:for循环适合处理已知次数的重复任务,而while循环适合处理"只要条件满足就一直执行"的场景。比如游戏主循环、服务器监听、用户输入验证等。

使用while循环时,最重要的是要确保循环条件能够最终变为False,否则会造成无限循环,导致程序卡死。一定要在循环体内有改变条件的代码!

虽然无限循环通常是bug,但在某些场景下(如游戏主循环、服务器监听),我们确实需要"无限循环",这时可以使用while True:,但必须配合break语句来退出循环。让我们一起来学习这些技巧吧!

语法结构

1while 条件表达式:
2 # 循环体(注意缩进)
3 要执行的代码
4 # 通常需要更新条件变量

while循环会在条件为真时重复执行代码块,直到条件变为假

条件控制原理

while循环工作流程:

  1. 检查条件表达式是否为True
  2. 如果为True,执行循环体代码
  3. 回到第1步,再次检查条件
  4. 如果条件为False,退出循环

无限循环风险:

务必确保循环中有代码能使条件最终变为False,否则会造成无限循环!

交互演示:库存监控

1# 点击运行按钮查看效果

无限循环的实际应用场景

虽然无限循环通常被认为是bug,但在某些场景下,我们确实需要"无限循环",这时必须配合break语句来控制退出。

服务器监听

1while True:
2 request = wait_for_request()
3 if request == "shutdown":
4 break
5 process_request(request)

服务器需要持续监听请求,直到收到关闭信号

游戏主循环

1while True:
2 handle_input()
3 update_game()
4 render_screen()
5 if game_over:
6 break

游戏需要持续运行,直到游戏结束

💡 关键要点:使用while True:时,必须确保有明确的退出条件(通常使用break),否则程序将永远运行下去。

避免无限循环的编程技巧

✅ 最佳实践:

1. 使用计数器限制循环次数
1count = 0
2while count < 10:
3 # 处理逻辑
4 count += 1 # 确保计数器递增
2. 使用标志变量控制循环
1running = True
2while running:
3 # 处理逻辑
4 if should_stop:
5 running = False # 改变标志变量
3. 使用break明确退出条件
1while True:
2 user_input = input("输入命令: ")
3 if user_input == "quit":
4 break # 明确退出

❌ 常见错误:

  • 忘记更新循环变量:while i < 10: 但循环体内没有改变i的值
  • 条件永远为True:while 1:while True: 但没有break
  • 循环条件写错:比如 while i > 0: 但i初始值为负数

即时练习

练习1:补全库存监控循环

未完成
1stock = 5
2while :
3 print(f"当前库存: {stock}")
4 stock -= 1
5print("库存不足!")

练习2:用户登录尝试限制

未完成
1max_attempts = 3
2attempts = 0
3while attempts < max_attempts:
4 password = input("请输入密码: ")
5 if password == "123456":
6 print("登录成功!")
7 # 跳出循环
8 attempts += 1

综合应用:双十一迷你购物系统 (5分钟)

学习提示:

现在到了检验学习成果的时候了!这个综合项目将帮助大家把for循环和while循环结合起来,完成一个完整的购物系统。

在完成项目的过程中,希望大家能够:

  • 仔细思考什么时候用for循环,什么时候用while循环
  • 注意代码的缩进和语法规范
  • 遇到问题时要多思考,多尝试

实践是检验真理的唯一标准。通过这个项目,大家不仅能巩固循环的知识,还能培养解决实际问题的能力。加油,我相信你们都能完成得很好!

在这个项目中,你将使用所学的循环知识,完成一个简单的购物系统。系统需要:

  • 使用 for 循环显示商品列表
  • 使用 while 循环控制购物流程
  • 计算购物总价
1# 双十一迷你购物系统
2
3# 商品列表
4products = [
5 {"name": "手机", "price": 1999},
6 {"name": "电脑", "price": 4999},
7 {"name": "耳机", "price": 299},
8 {"name": "键盘", "price": 199},
9 {"name": "鼠标", "price": 99}
10]
11
12# 任务1: 使用for循环显示商品列表
13print("===== 商品列表 =====")
14for i, product in :
15 print(f"{i+1}. {product['name']} - ¥{product['price']}")
16
17cart = []
18total = 0
19
20# 任务2: 使用while循环控制购物流程
21print("\n===== 开始购物 =====")
22print("请输入商品编号添加到购物车,输入0结束购物")
23
24: # while循环条件
25 choice = int(input("请选择商品编号: "))
26 if choice == 0:
27 break
28 elif 1 <= choice <= len(products):
29 product = products[choice - 1]
30 cart.append(product)
31 total = product['price']
32 print(f"已添加 {product['name']} 到购物车")
33 else:
34 print("无效的商品编号,请重新选择")
35
36# 任务3: 显示购物车和总价
37print("\n===== 购物车 =====")
38 cart: # 检查购物车是否为空
39 for item in cart:
40 print(f"- {item['name']}: ¥{item['price']}")
41 print(f"\n总价: ¥{total}")
42:
43 print("购物车为空")

💡 高级知识点补充

1. 循环嵌套的性能考虑

当使用嵌套循环时,时间复杂度会急剧增加。两层循环的时间复杂度是O(n²),三层是O(n³)。

1# 嵌套循环示例
2for i in range(100):
3 for j in range(100):
4 # 这行代码会执行10000次!

优化建议:尽量避免深层嵌套,如果可能,使用提前终止(break)来减少不必要的循环次数。

2. 循环中的异常处理(try-except)

在循环中处理数据时,可能会遇到异常(如除零错误、类型错误等),使用try-except可以优雅地处理这些情况。

1numbers = [10, 5, 0, 8, 3]
2for num in numbers:
3 try:
4 result = 100 / num
5 print(f"100 / {num} = {result}")
6 except ZeroDivisionError:
7 print(f"无法除以 {num}")
8 continue # 跳过当前迭代,继续下一个

说明:使用try-except可以防止一个错误导致整个循环崩溃,让程序能够继续处理后续数据。

点击揭开惊喜 🎁

老师有悄悄话要跟你们说...

📚 学习总结

for 循环要点

  • 用于遍历序列或可迭代对象
  • 使用range()生成数字序列
  • 使用enumerate()同时获取索引和值
  • 支持break和continue控制
  • 列表推导式是for循环的简化写法

while 循环要点

  • 适合未知循环次数的场景
  • 必须确保条件能变为False
  • 常用计数器或标志变量控制
  • 支持break和continue控制
  • 无限循环在特定场景下有用

关键区别与选择

选择 for 循环:

  • • 遍历列表、元组、字符串等序列
  • • 已知循环次数
  • • 需要处理序列中的每个元素

选择 while 循环:

  • • 未知循环次数
  • • 需要条件判断控制
  • • 游戏主循环、服务器监听等

学习心得

通过本节课的学习,我们掌握了Python中两种重要的循环结构。循环不仅是编程的基础,更是解决问题的思维方式。希望大家能够在实际编程中灵活运用这些知识,不断提升编程能力!

记住:多练习、多思考、多实践,编程能力会越来越强!💪