教学平台:Anaconda Jupyter Notebook

第4章 循环程序设计
4.1 遍历循环for语句
📚 学习目标
•掌握for循环的基本语法结构
•理解遍历结构的概念及常见类型
•熟练运用range()函数控制循环
•掌握带else子句的for循环用法
•能够运用for循环解决实际问题

4.1.1 不带else的for语句
一、基本语法格式
for循环是Python中最常用的遍历循环结构,其基本语法如下:
⚠️ 要点1:for末尾的冒号(:)不可省略
重要提醒:for语句行末尾的冒号:是Python语法强制要求的,忘记添加会导致SyntaxError(语法错误)。
错误示例:
# ❌ 错误:缺少冒号for i in range(5) print(i)
报错信息:SyntaxError: expected ':'
正确写法:
# ✅ 正确:必须加上冒号for i in range(5): print(i)
知识串联:回忆第3章学习的if语句、第2章的函数定义,它们同样需要在语句末尾添加冒号。这是Python语法的一致性格式要求!

🔢 要点2:循环次数的确定
for循环的循环次数由遍历结构中的元素个数决定,而不是由循环变量的初始值决定。
核心原则: > 循环次数 = 遍历结构中元素的个数
示例分析:
# 示例1:遍历列表(5个元素,循环5次)fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]for fruit in fruits: print(f"当前水果:{fruit}")print("循环结束")
输出:
当前水果:苹果当前水果:香蕉当前水果:橙子当前水果:葡萄当前水果:西瓜循环结束
循环次数:5次(因为列表有5个元素)
# 示例2:遍历字符串(每个字符是一个元素)school = "CK"for char in school: print(f"字符:{char}")
输出:
字符:C字符:K
循环次数:2次(字符串”CK”有2个字符)
# 示例3:使用range(3)(生成3个数字:0,1,2)for i in range(3): print(f"第{i+1}次循环,i的值是:{i}")
输出:
第1次循环,i的值是:0第2次循环,i的值是:1第3次循环,i的值是:2
循环次数:3次(range(3)生成3个数字)

📦 要点3:关于遍历结构
遍历结构是指可以被逐个访问其中元素的数据结构。Python中常见的遍历结构包括:
遍历结构类型 | 示例 | 说明 |
字符串 | "Hello" | 逐个字符遍历 |
列表 | [1, 2, 3] | 逐个元素遍历 |
元组 | (1, 2, 3) | 与列表类似,不可修改 |
字典 | {"a": 1, "b": 2} | 遍历键(后续章节详细学习) |
集合 | {1, 2, 3} | 无序遍历(后续章节详细学习) |
range对象 | range(5) | 生成数字序列(本节重点) |
文件对象 | open("file.txt") | 逐行读取(第7章学习) |
示例:不同类型的遍历结构
# 示例1:遍历字符串 - 检查CK学生学号格式student_id = "CK2024001"print("逐个检查学号字符:")for char in student_id: print(char, end=" ")print("\n")
# 示例2:遍历列表 - 统计CK各学院学生人数colleges = ["经管学院", "土木学院", "电气学院", "艺术学院"]student_counts = [1200, 980, 1100, 650]print("各学院学生人数统计:")for i in range(len(colleges)): print(f"{colleges[i]}: {student_counts[i]}人")
知识串联:回忆第2章学习的字符串索引与切片(str[i]),for循环实际上是在自动帮我们完成”取第0个、第1个、第2个…“的操作!

🔧 要点4:使用range函数做遍历结构
range()函数是for循环中最常用的遍历结构生成器,用于生成一个整数序列。它有三种常用格式:
格式1:range(stop) - 从0开始到stop-1
语法:range(n) 生成序列:0, 1, 2, ..., n-1
参数说明: - stop:终止值(不包含),必须是整数 - 起始值默认为0 - 步长默认为1
示例:
# 生成0到4(不包含5)的序列for i in range(5): print(i, end=" ")# 输出:0 1 2 3 4
实际应用:打印CK校园歌手大赛前5名
print("🏆 CK校园歌手大赛获奖名单")for rank in range(5): print(f"第{rank + 1}名:待公布")
格式2:range(start, stop) - 指定起始和终止
语法:range(start, stop) 生成序列:start, start+1, ..., stop-1
参数说明: - start:起始值(包含) - stop:终止值(不包含)
示例:
# 生成5到9(不包含10)的序列for i in range(5, 10): print(i, end=" ")# 输出:5 6 7 8 9
实际应用:打印CK教学楼5-9层的教室安排
print("🏢 CK教学楼教室分布")for floor in range(5, 10): print(f"{floor}层:多媒体教室")
格式3:range(start, stop, step) - 指定步长
语法:range(start, stop, step)
参数说明: - start:起始值(包含) - stop:终止值(不包含) - step:步长(可以是负数,表示倒序)
示例:
# 生成0到10,步长为2(偶数)for i in range(0, 10, 2): print(i, end=" ")# 输出:0 2 4 6 8
# 生成10到1,步长为-1(倒序)for i in range(10, 0, -1): print(i, end=" ")# 输出:10 9 8 7 6 5 4 3 2 1
实际应用:CK运动会倒计时、隔行输出座位号
# 应用1:运动会倒计时print("⏰ CK运动会开幕式倒计时")for seconds in range(10, 0, -1): print(f"倒计时:{seconds}秒")print("🎉 开幕!")
# 应用2:隔行安排座位(只安排偶数排)print("🎭 CK大礼堂座位安排(偶数排)")for row in range(2, 21, 2): print(f"第{row}排:已预留")
range()三种格式对比表:
格式 | 示例 | 生成序列 | 元素个数 |
range(stop) | range(5) | 0,1,2,3,4 | 5 |
range(start, stop) | range(2,6) | 2,3,4,5 | 4 |
range(start, stop, step) | range(1,10,2) | 1,3,5,7,9 | 5 |
知识串联:回忆第2章学习的数值运算,range()的参数必须是整数。如果需要浮点数序列,需要借助其他方法(如numpy库,后续学习)。

二、代码实践:基础练习
练习1:使用range()打印CK大学1-4年级的学生称谓
grades = ["大一", "大二", "大三", "大四"]for i in range(len(grades)): print(f"{grades[i]}新生")
练习2:计算1到100的累加和(使用range)
total = 0for num in range(1, 101): total += numprint(f"1到100的和是:{total}") # 输出5050

🤖 AI辅助学习:4.1.1节
学习目标:通过与AI对话,巩固for循环基础语法,并完成有趣的编程练习。
练习1:重庆火锅食材遍历器
场景:设计一个程序,遍历重庆火锅的常见食材,并输出”正在涮XX…”
AI提示词:
请帮我写一个Python程序,使用for循环遍历以下重庆火锅食材列表:hotpot_foods = ["毛肚", "鸭肠", "黄喉", "嫩牛肉", "耗儿鱼", "豆皮", "土豆片", "宽粉"]要求:1. 使用for循环遍历列表2. 每行输出格式:"正在涮[食材名],倒计时3秒..."3. 使用time.sleep(0.5)模拟等待(需要import time)4. 最后输出:"火锅涮完了,可以开吃了!"
练习2:CK校园樱花树生长动画
场景:使用for循环和字符串乘法,模拟樱花树从种子长到开花的ASCII艺术动画。
AI提示词:
请帮我创建一个Python程序,使用for循环和print语句,在控制台输出一个樱花树生长的简单动画效果。要求:1. 使用for循环控制树的"生长"阶段(从1到5层)2. 使用字符串乘法"*" * n来生成树冠3. 使用"|"作为树干4. 使用time.sleep(0.3)让每一行有延迟效果5. 最后输出"🌸 CK校园樱花开了!"示例输出效果:**** ************||🌸 CK校园樱花开了!
练习3:重庆轻轨穿楼倒计时
场景:模拟重庆李子坝轻轨穿楼的倒计时场景。
AI提示词:
请帮我写一个Python程序,模拟重庆轻轨即将穿楼的倒计时场景。要求:1. 使用range()函数实现从10到1的倒计时(range(10, 0, -1))2. 每行输出:"🚇 轻轨穿楼倒计时:X秒"3. 使用time.sleep(1)模拟真实秒数4. 倒计时结束后输出:"🚇 轻轨穿过CK大楼!"5. 使用for循环实现

4.1.2 带else的for语句
一、语法结构
Python的for循环可以带有一个else子句,这是Python特有的语法特性:
for 循环变量 in 遍历结构: 循环体语句块else: else语句块
二、执行规则
关键理解:
- 当for循环正常结束(没有被break语句中断)时,会执行else块
- 如果循环被break中断,else块不会执行
执行流程图:
开始 → 遍历结构还有元素? → 是 → 执行循环体 → 回到判断↓否执行else块(如果存在)→ 结束
三、代码示例
示例1:基础演示
# 示例:打印CK图书馆借阅流程books = ["Python基础", "数据分析", "机器学习"]for book in books: print(f"📖 正在借阅《{book}》")else: print("✅ 所有书籍借阅完成!")
输出:
📖 正在借阅《Python基础》📖 正在借阅《数据分析》📖 正在借阅《机器学习》✅ 所有书籍借阅完成!
示例2:与break对比(预习4.3节内容)
# 查找CK食堂是否有重庆小面foods = ["麻辣烫", "盖浇饭", "重庆小面", "黄焖鸡"]for food in foods: print(f"检查:{food}") if food == "重庆小面": print("🍜 找到了!") break # 找到了就退出else: # 如果循环没有被break中断,执行这里 print("😔 今天没有重庆小面")
输出:
检查:麻辣烫检查:盖浇饭检查:重庆小面🍜 找到了!
注意:因为有break,else块没有执行
示例3:else执行的情况
# 查找CK周边3公里内的火锅店distances = [5, 8, 12] # 单位:公里,都超过3公里for dist in distances: print(f"发现火锅店,距离:{dist}公里") if dist <= 3: print("🍲 就在附近!") breakelse: print("😢 3公里内没有火锅店,需要走远一点")
输出:
发现火锅店,距离:5公里发现火锅店,距离:8公里发现火锅店,距离:12公里😢 3公里内没有火锅店,需要走远一点
因为没有触发break,else块执行了
四、实际应用场景
场景1:循环结束后统一处理
# 计算CK某班级所有学生的平均分scores = [85, 92, 78, 96, 88]total = 0for score in scores: total += scoreelse: average = total / len(scores) print(f"班级平均分:{average:.2f}")
场景2:搜索算法中的”未找到”处理
# 在CK学生名单中查找特定学号student_ids = ["CK2024001", "CK2024005", "CK2024009"]target = "CK2024003"for sid in student_ids: if sid == target: print(f"找到学生:{sid}") breakelse: print(f"未找到学号为{target}的学生")
知识串联:回忆第3章学习的if-else分支结构,for-else中的else与分支中的else不同,它表示”循环正常完成后的奖励”,而不是”条件不满足”。

🤖 AI辅助学习:4.1.2节
练习1:CK图书馆图书检索系统
场景:使用for-else结构实现图书检索,如果找到书则输出位置,否则提示”该书已借出”。
AI提示词:
请帮我写一个Python图书检索系统,使用for-else结构。要求:1. 创建一个图书列表,每本书是一个字典,包含书名和位置,例如:books = [{"name": "Python基础教程", "location": "A区3排"},{"name": "经济学原理", "location": "B区1排"},{"name": "数据结构", "location": "A区5排"}]2. 让用户输入要查找的书名(使用input())3. 使用for循环遍历查找4. 如果找到,输出"找到《书名》,位置:XXX"并break5. 使用else块处理"未找到"的情况,输出"该书已借出或不存在"6. 添加适当的emoji让输出更友好
练习2:重庆天气预警检查器
场景:检查未来7天是否有暴雨天气,使用for-else结构。
AI提示词:
请帮我写一个重庆天气预警检查程序,使用for-else结构。要求:1. 创建一个包含7天天气的列表:weather = ["晴", "多云", "小雨", "晴", "暴雨", "多云", "晴"]2. 使用for循环遍历每一天3. 如果遇到"暴雨",输出"⚠️ 第X天有暴雨预警!请减少外出"并break4. 如果循环正常结束(没有暴雨),else块输出"✅ 未来7天无暴雨,适宜出行"5. 每天输出时添加延迟time.sleep(0.5)模拟检查过程

4.1.3 程序设计实例
实例1:CK学生成绩统计系统
问题描述: 编写程序,统计CK大学某班级(假设有5名学生)的Python课程成绩,要求: 1. 输入5名学生的成绩 2. 计算并输出:最高分、最低分、平均分 3. 统计及格人数(>=60分)和优秀人数(>=90分)
算法分析: 1. 使用range(5)控制输入5次 2. 使用变量记录最高分、最低分、总分 3. 使用计数器记录及格和优秀人数 4. 循环结束后计算平均分
完整代码:
# CK学生成绩统计系统print("=" * 40)print("📊 CK大学Python课程成绩统计系统")print("=" * 40)# 初始化变量max_score = 0 # 最高分min_score = 100 # 最低分total_score = 0 # 总分pass_count = 0 # 及格人数excellent_count = 0 # 优秀人数student_count = 5 # 学生人数# 循环输入成绩for i in range(student_count): # 输入成绩(使用eval转换为数字,也可以用int()) score = eval(input(f"请输入第{i+1}名学生的成绩(0-100):")) # 更新最高分 if score > max_score: max_score = score # 更新最低分 if score < min_score: min_score = score # 累加总分 total_score += score # 统计及格人数 if score >= 60: pass_count += 1 # 统计优秀人数 if score >= 90: excellent_count += 1# 计算平均分average_score = total_score / student_count# 输出统计结果print("\n" + "=" * 40)print("📈 统计结果")print("=" * 40)print(f"最高分:{max_score}分")print(f"最低分:{min_score}分")print(f"平均分:{average_score:.2f}分")print(f"及格人数:{pass_count}人({pass_count/student_count*100:.1f}%)")print(f"优秀人数:{excellent_count}人({excellent_count/student_count*100:.1f}%)")
运行示例:
========================================📊 CK大学Python课程成绩统计系统========================================请输入第1名学生的成绩(0-100):85请输入第2名学生的成绩(0-100):92请输入第3名学生的成绩(0-100):78请输入第4名学生的成绩(0-100):95请输入第5名学生的成绩(0-100):88========================================📈 统计结果========================================最高分:95分最低分:78分平均分:87.60分及格人数:5人(100.0%)优秀人数:2人(40.0%)
知识串联: - 回忆第2章的eval()函数,用于将输入的字符串转换为数值 - 回忆第3章的if分支结构,用于条件判断 - 使用格式化字符串:.2f控制小数位数(第2章字符串格式化)

实例2:重庆景点推荐系统
问题描述: 编写程序,根据用户选择的偏好(1-自然风光,2-人文历史,3-美食体验),推荐相应的重庆景点,并列出该类别下的前3个推荐景点。
算法分析: 1. 使用字典存储不同类别的景点列表 2. 使用for循环配合range(3)输出前3个景点 3. 使用字符串索引输出景点序号
完整代码:
# 重庆景点推荐系统print("=" * 50)print("🌄 欢迎来到重庆!CK大学周边游推荐系统")print("=" * 50)# 景点数据库(使用字典存储)attractions = { "1": { "name": "自然风光", "spots": ["武隆天生三桥", "长江索道", "南山一棵树观景台", "金佛山", "黑山谷", "四面山"] }, "2": { "name": "人文历史", "spots": ["磁器口古镇", "洪崖洞", "白公馆", "渣滓洞", "三峡博物馆", "湖广会馆"] }, "3": { "name": "美食体验", "spots": ["八一路好吃街", "观音桥步行街", "较场口夜市", "磁器口美食街", "南山火锅一条街", "回龙湾美食街"] }}# 显示菜单print("\n请选择您感兴趣的类别:")for key in attractions: print(f"{key}. {attractions[key]['name']}")# 获取用户选择choice = input("\n请输入选项(1/2/3):")# 验证输入有效性if choice in attractions: category = attractions[choice] print(f"\n🎯 为您推荐【{category['name']}】类景点TOP3:") print("-" * 40) # 使用for循环输出前3个景点 for i in range(3): spot = category['spots'][i] print(f" TOP{i+1}: {spot}") print("-" * 40) print("祝您在重庆玩得开心!🎉")else: print("❌ 输入无效,请输入1、2或3")
运行示例:
==================================================🌄 欢迎来到重庆!CK大学周边游推荐系统==================================================请选择您感兴趣的类别:1. 自然风光2. 人文历史3. 美食体验请输入选项(1/2/3):3🎯 为您推荐【美食体验】类景点TOP3:----------------------------------------TOP1: 八一路好吃街TOP2: 观音桥步行街TOP3: 较场口夜市----------------------------------------祝您在重庆玩得开心!🎉
知识串联: - 回忆第2章学习的字符串乘法"=" * 50用于生成装饰线 - 回忆第3章学习的if-else分支进行输入验证 - 使用了列表索引category['spots'][i]访问元素(第5章将详细学习列表)

🤖 AI辅助学习:4.1.3节
练习1:CK食堂满意度调查统计
场景:设计一个程序,收集10位同学对CK食堂的满意度评分(1-5分),并生成统计报告。
AI提示词:
请帮我写一个CK食堂满意度调查统计程序。要求:1. 使用for循环收集10位同学的评分(1-5分,5分最满意)2. 使用列表存储所有评分3. 计算并输出:- 平均满意度- 最高分和最低分- 各分数段(1-5分)的人数分布- 满意度评级(>=4.0为优秀,>=3.0为良好,<3.0需改进)4. 使用*符号绘制简单的柱状图显示分布,例如:5分: **** (4人)4分: ***(3人)5. 添加适当的注释和友好的输出格式
练习2:重庆方言学习器
场景:设计一个互动程序,使用for循环教用户学习5句常用的重庆方言。
AI提示词:
请帮我写一个有趣的重庆方言学习程序。要求:1. 创建一个包含5个方言词汇的列表,每个元素是一个字典,包含:- 方言:重庆话表达- 普通话:对应的普通话意思- 场景:使用场景例如:{"方言": "要得", "普通话": "好的/可以", "场景": "同意对方提议"}2. 使用for循环逐条展示方言:- 先显示方言和"???"让用户猜测意思- 使用time.sleep(1)制造悬念- 然后显示普通话意思和使用场景- 使用input()让用户按回车继续下一条3. 循环结束后,使用for-else结构(或循环后代码)输出:"🎉 恭喜!你已经学会了5句重庆话!"4. 最后使用for循环让用户"复习"一遍所有方言5. 添加emoji和分隔线让界面美观
练习3:Python绘制CK校徽图案
场景:使用for循环和字符串操作,在控制台输出简单的ASCII艺术图案。
AI提示词:
请帮我写一个Python程序,使用for循环在控制台输出一个CK校徽风格的ASCII艺术图案。要求:1. 使用for循环和字符串乘法生成对称图案2. 图案可以包含:- 一个菱形或圆形的外框- 中间的"CK"字样- 底部的"CHONGQING"字样3. 使用不同的字符(如*、#、@、=)增加层次感4. 使用range()控制每一行的输出5. 添加颜色代码(使用ANSI转义序列如\033[91m表示红色)让输出有颜色6. 最后输出"🏫 CK University Est. 1005"

📋 本节知识总结
核心知识点回顾
知识点 | 关键内容 | 记忆口诀 |
for基本语法 | for var in 序列: | “for in 冒号别忘记” |
循环次数 | 由遍历结构元素个数决定 | “有几个元素,循环几次” |
range()格式1 | range(stop) → 0到stop-1 | “从0开始,不含终点” |
range()格式2 | range(start, stop) | “含头不含尾” |
range()格式3 | range(start, stop, step) | “步长可正可负” |
for-else | 循环正常结束执行else | “break打断,else不执行” |
与前面章节的联系
第2章基础 → 第3章分支 → 第4章循环↓↓↓ 变量类型if判断for遍历 字符串操作逻辑运算range函数 输入输出条件表达式嵌套应用