第十三课:组装你的代码“机器人” – 综合项目与结构组合
- 时长: 90 分钟
- 教学目标:
- 综合运用之前学过的 Python 基础知识:变量、数据类型、列表、循环(
for
)、条件判断(if-elif-else
)、函数(定义、调用、参数、返回值)。 - 学习分析一个稍微复杂的实际问题,并将其分解成几个小的、可管理的部分。
- 练习使用函数来封装问题的各个部分,提高代码的组织性和可读性。
- 练习使用列表来存储和管理一组相关的数据。
- 练习使用循环和条件判断来处理列表中的数据。
- 提升解决问题的能力:从问题描述到编写可运行的代码。
- 体验完成一个小型项目的成就感。
- 综合运用之前学过的 Python 基础知识:变量、数据类型、列表、循环(
课程内容
1. 复习与引入 (10 分钟)
- 复习: 快速回顾我们最近学习的关键知识点:列表的创建、访问、遍历和常用操作;函数的定义、调用、参数和返回值。
- 提出问题: 老师提问:“我们已经学会了如何用列表存数据,用循环处理数据,用条件判断做选择,用函数打包代码。现在,老师这里有一组学生的考试分数,我想计算他们的平均分、找出最高分、统计有多少人及格(及格分 60),并把这些结果都打印出来。我们怎么用学过的知识来完成这个任务呢?这不像之前只打印一句话那么简单了。”
- 引出综合项目: 解决一个稍微复杂的问题,需要我们把之前学过的不同的编程“积木块”——列表、循环、条件、函数——组合起来使用。今天,我们就一起来做一个“学生成绩分析小助手”。
2. 项目需求分析与分解 (15 分钟)
- 明确目标: 我们的目标是处理一列分数,并计算:总分、平均分、最高分、及格人数。
- 分解任务: 思考这个任务可以分成哪些小步骤?
- 需要一个地方存分数 → 列表。
- 需要一个方法计算总分 → 循环遍历列表,累加分数。
- 需要一个方法计算平均分 → 用总分除以学生人数(列表长度)。
- 需要一个方法找出最高分 → 循环遍历列表比较大小,或者使用内置函数。
- 需要一个方法统计及格人数 → 循环遍历列表,用条件判断检查分数是否及格,用计数器记录。
- 需要一个地方把这些计算过程打包,方便调用 → 函数。
- 最后需要把结果打印出来。
- 设计函数: 我们可以为每个小任务设计一个函数:
calculate_total(scores)
: 计算总分,返回总分。calculate_average(scores)
: 计算平均分,返回平均分。find_max_score(scores)
: 找出最高分,返回最高分。count_passing_students(scores, pass_score)
: 统计及格人数,返回人数。- 主程序部分:创建分数列表,调用上面的函数,打印结果。
3. Step by Step 实现项目代码 (40 分钟)
老师带领学生一步一步编写代码。每写一部分,都运行测试一下。
- 第一步:创建分数列表
# 存储学生分数 scores = [85, 92, 78, 95, 88, 60, 75, 99, 55, 82] print("原始分数列表:", scores) print("-" * 20) # 打印分隔线
(简单回顾列表创建和打印)
-
第二步:实现计算总分的函数
# 计算总分函数 def calculate_total(scores_list): # 在函数内部定义一个变量来累加总分 total = 0 # 遍历分数列表 for score in scores_list: total = total + score # 累加分数 # 返回计算好的总分 return total # 调用函数测试 total_score = calculate_total(scores) print("总分是:", total_score) print("-" * 20)
(强调函数参数、返回值,以及循环累加的用法)
(可选:如果时间允许,可以顺带介绍内置函数sum()
的用法:total = sum(scores_list)
) -
第三步:实现计算平均分的函数
# 计算平均分函数 def calculate_average(scores_list): # 先获取总分 (可以调用上面定义的函数,或者直接用 sum() 函数) total = sum(scores_list) # 直接使用内置 sum 函数 # 获取学生人数 (列表长度) count = len(scores_list) # 避免除以零的错误 (虽然这个例子不容易出现,但是个好习惯) if count == 0: return 0.0 # 如果列表是空的,平均分是 0 # 计算平均分并返回 average = total / count return average # 调用函数测试 average_score = calculate_average(scores) print("平均分是:", average_score) print("-" * 20)
(强调函数参数、返回值,以及如何处理可能的错误,虽然这里的列表不为空)
-
第四步:实现找出最高分和最低分的函数
# 找出最高分函数 def find_max_score(scores_list): # 检查列表是否为空 if len(scores_list) == 0: return None # 或者返回一个特殊值表示没有分数 # 使用内置函数 max() max_score = max(scores_list) # 返回最高分 return max_score # 找出最低分函数 def find_min_score(scores_list): # 检查列表是否为空 if len(scores_list) == 0: return None # 使用内置函数 min() min_score = min(scores_list) # 返回最低分 return min_score # 调用函数测试 highest = find_max_score(scores) lowest = find_min_score(scores) print("最高分是:", highest) print("最低分是:", lowest) print("-" * 20)
(强调函数参数、返回值,介绍
max()
和min()
函数的用法。可以简单提及如何用循环自己实现 max/min,作为可选的挑战) -
第五步:实现统计及格人数的函数
# 统计及格人数函数 def count_passing_students(scores_list, pass_score): # 初始化计数器 count = 0 # 遍历分数列表 for score in scores_list: # 使用条件判断检查是否及格 if score >= pass_score: count = count + 1 # 计数器加一 # 返回及格人数 return count # 调用函数测试 pass_line = 60 # 设定及格分数线 passing_count = count_passing_students(scores, pass_line) print(f"及格分数线是:{pass_line}分") # f-string 格式化输出 print("及格人数是:", passing_count, "个") print("-" * 20)
(强调函数带多个参数,循环和条件判断的结合使用,计数器的用法)
-
第六步:主程序整合与打印最终结果
# --- 这是程序的“主入口”部分 --- # 准备数据 student_scores = [85, 92, 78, 95, 88, 60, 75, 99, 55, 82] pass_score_line = 60 print("--- 学生成绩分析报告 ---") print(f"分析的分数列表:{student_scores}") print("-" * 20) # 调用之前定义的函数,获取结果 total = calculate_total(student_scores) average = calculate_average(student_scores) highest = find_max_score(student_scores) lowest = find_min_score(student_scores) passing_count = count_passing_students(student_scores, pass_score_line) # 打印所有结果 print(f"总分:{total}") print(f"平均分:{average:.2f}") # 使用 f-string 并格式化平均分保留两位小数 print(f"最高分:{highest}") print(f"最低分:{lowest}") print(f"及格人数 ({pass_score_line}分以上):{passing_count} 人") print("-" * 20) print("分析完成。")
(强调主程序如何组织,调用函数获取结果,并打印。介绍 f-string 格式化输出,特别是控制小数位数)
4. 巩固练习与扩展 (15 分钟)
- 练习 1: 修改上面的代码,让及格分数线
pass_score_line
由用户输入决定。# TODO: 让用户输入及格分数线,并转换为数字类型 # pass_score_line_str = input("请输入及格分数线:") # pass_score_line = TODO: 转换为数字 # TODO: 然后调用 count_passing_students 函数
- 练习 2: 在主程序中,额外统计并打印优秀人数(90 分及以上)。可以自己写一个函数,或者直接在主程序中用循环和条件判断实现。
- 练习 3: (选做) 修改
find_max_score
函数,不使用内置的max()
函数,而是自己用循环遍历列表来找到最高分。
5. 总结与提问 (5 分钟)
- 回顾: 总结本节课通过一个综合项目,使用了列表、循环、条件判断和函数来解决问题。强调了分解问题、用函数封装代码、用列表存储数据、用循环和条件处理数据的过程。
- 提问:
- 在这个项目中,列表用来做什么?
- 我们定义了哪些函数?每个函数负责做什么?
- 计算总分和统计及格人数为什么都用到了循环?
- 统计及格人数为什么用到了条件判断?
- 函数参数和返回值在这个项目中有什么作用?
- 答疑: 回答学生问题。
6. 布置课后作业 (5 分钟)
- 作业 1: 参考课堂项目,编写一个程序,分析一个英文单词列表。
- 创建一个字符串列表,存放 10 个左右的英文单词。
- 编写一个函数
count_words_starting_with(word_list, letter)
,接收一个单词列表和一个字母作为参数,统计列表中以该字母开头的单词有多少个,并返回数量。 - 编写一个函数
find_longest_word(word_list)
,接收一个单词列表,找出并返回其中最长的单词。(提示:可以使用循环和len()
进行比较)。 - 在主程序中调用这些函数,打印出以 ‘a’ 开头的单词数量,以及列表中最长的单词。
- 作业 2: 参考课堂项目,编写一个简单的商品清单分析程序。
- 创建一个列表,存放商品的单价,例如
prices = [2.5, 5.0, 1.2, 10.0, 3.5]
。 - 计算并打印商品的总价格、最贵的商品价格、最便宜的商品价格。
- 假设所有商品都打 8 折,创建一个新的列表,存放打折后的价格,并打印这个新列表。(提示:遍历原列表,计算打折价,添加到新列表)。
- 创建一个列表,存放商品的单价,例如
- 作业 3: (选做) 扩展商品清单程序。再创建一个列表,存放对应商品的数量,例如
quantities = [3, 1, 5, 2, 4]
。计算所有商品的总价(单价乘以数量再求和)。编写一个函数来实现。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)