- 时长: 90 分钟
- 教学目标:
- 复习
math
模块的基本使用 (import math
,math.sqrt
,math.pow
,math.pi
)。 - 学习
math
模块中更多实用的数学函数和常量(例如:math.ceil
,math.floor
,math.fabs
)。 - 理解“算法”在解决问题中的概念(即:解决问题的步骤和方法)。
- 练习使用列表和字典来组织需要进行数学计算的数据。
- 掌握如何结合
math
模块、数据结构(列表、字典)、循环、条件判断和函数来解决需要多步骤计算的问题。 - 提高分析问题、分解问题、设计解决步骤(算法)的能力。
- 复习
课程内容
1. 复习与引入 (10 分钟)
- 复习: 快速回顾我们之前学过的模块是什么(别人写好的代码,我们可以导入使用),以及
datetime
和os
模块的一些简单功能。回顾列表和字典这两种数据结构如何存储多个数据。 - 提出问题: 老师提问:“上次我们用模块让程序知道时间和日期,或者操作文件和文件夹。Python 还有很多其他的‘工具箱’模块。比如,如果我想计算一个数的平方根怎么办?我想精确地使用圆周率怎么办?” “我们学了列表和字典来存数据,学了循环和判断来处理数据。但面对一个稍微复杂一点的问题,比如计算几个点的距离,或者分析一组温度数据,怎么一步一步地思考和写代码呢?这就要用到‘算法’了。”
- 引出新知识: 今天我们深入学习一个非常重要的数学“工具箱”——
math
模块,它提供了很多数学计算的功能。同时,我们会学习如何把数学计算、数据结构和我们学过的控制结构结合起来,解决一些实际问题。解决问题的步骤,就是我们说的“算法”。
2. 更深入地使用 math
模块 (20 分钟)
- 复习
import math
: 首先要导入math
模块才能使用里面的功能。import math
- 复习常用功能:
- 平方根:
math.sqrt(数字)
print(math.sqrt(9)) # 结果是 3.0 print(math.sqrt(2)) # 结果是 1.414...
- 幂运算:
math.pow(底数, 指数)
(和**
类似,但结果总是浮点数)print(math.pow(2, 3)) # 结果是 8.0 print(math.pow(5, 2)) # 结果是 25.0
- 圆周率:
math.pi
(一个非常精确的圆周率值)radius = 5 area = math.pi * math.pow(radius, 2) # 计算圆的面积 print("圆的面积是:", area)
- 平方根:
- 学习新的实用函数:
- 向上取整:
math.ceil(数字)
(返回大于或等于该数字的最小整数)print(math.ceil(3.14)) # 结果是 4 print(math.ceil(3.9)) # 结果是 4 print(math.ceil(3.0)) # 结果是 3
- 向下取整:
math.floor(数字)
(返回小于或等于该数字的最大整数)print(math.floor(3.14)) # 结果是 3 print(math.floor(3.9)) # 结果是 3 print(math.floor(3.0)) # 结果是 3
- 绝对值:
math.fabs(数字)
(返回数字的绝对值,结果总是浮点数)print(math.fabs(-10)) # 结果是 10.0 print(math.fabs(10)) # 结果是 10.0
- 向上取整:
- 动手实践: 学生尝试使用
math.ceil()
,math.floor()
,math.fabs()
处理一些数字,观察结果。 使用math.pi
计算一个不同半径的圆的周长(周长 = 2 * π * 半径)。
3. 用数据结构组织数学问题中的数据 (15 分钟)
- 为什么要组织数据: 在解决实际问题时,我们经常需要处理一组相关的数字或信息。把它们存到列表或字典里,可以更方便地进行计算和管理。
- 列表的应用: 列表很适合存储一系列同类的数据,比如:
- 一组测量值:
measurements = [1.5, 2.3, 1.8, 2.0]
- 一个数列:
numbers = [4, 9, 16, 25]
- 一组测量值:
- 字典的应用: 字典很适合存储有“标签”或有关联的数据,比如:
- 一个点的坐标:
point_a = {'x': 3, 'y': 4}
- 物体的属性:
item = {'weight': 50, 'height': 1.2}
- 一个点的坐标:
- 回顾访问方式: 复习如何通过索引访问列表元素
列表[索引]
,如何通过键访问字典值字典[键]
或字典.get(键)
,以及如何用for
循环遍历列表和字典的键值对。
4. 解决问题:思考“步骤” (算法初步) (25 分钟)
- 什么是算法? 简单来说,算法就是解决一个问题的详细步骤或方法。就像做蛋糕有步骤、搭积木有步骤一样,编程解决问题也需要一步一步来。
- 问题示例:计算平面上两点之间的距离。 假设我们知道两个点 A 和 B 的坐标 (x1, y1) 和 (x2, y2)。
- 数学公式: 距离 = √((x2 – x1)² + (y2 – y1)²)
- 思考步骤 (算法):
- 确定点 A 和点 B 的坐标值 (x1, y1, x2, y2)。
- 计算 x 方向的差值
dx = x2 - x1
。 - 计算 y 方向的差值
dy = y2 - y1
。 - 计算 dx 的平方
dx_squared = dx * dx
或math.pow(dx, 2)
。 - 计算 dy 的平方
dy_squared = dy * dy
或math.pow(dy, 2)
。 - 将 dx 的平方和 dy 的平方相加
sum_of_squares = dx_squared + dy_squared
。 - 计算 sum_of_squares 的平方根
distance = math.sqrt(sum_of_squares)
。 - 打印结果 distance。
- 用代码实现这个算法: 我们将使用函数把这段计算逻辑封装起来,使用字典来存储点的坐标,使用
math
模块进行计算。import math # 定义一个函数来计算两点距离 # 参数 p1 和 p2 是字典,例如 {'x': 3, 'y': 4} def calculate_distance(p1, p2): # 1. 获取坐标值 x1 = p1.get('x', 0) # 使用 .get() 更安全,如果键不存在默认给 0 y1 = p1.get('y', 0) x2 = p2.get('x', 0) y2 = p2.get('y', 0) # 2. 计算差值 dx = x2 - x1 dy = y2 - y1 # 3 & 4. 计算差值的平方 dx_squared = math.pow(dx, 2) dy_squared = math.pow(dy, 2) # 5. 计算平方和 sum_of_squares = dx_squared + dy_squared # 6. 计算平方根 (距离) distance = math.sqrt(sum_of_squares) # 返回距离结果 return distance # --- 主程序部分 --- # 定义两个点的坐标 (使用字典) point_a = {'x': 3, 'y': 4} point_b = {'x': 6, 'y': 8} # 调用函数计算距离 dist_ab = calculate_distance(point_a, point_b) # 打印结果 print(f"点 A 的坐标是 {point_a}") print(f"点 B 的坐标是 {point_b}") print(f"点 A 和点 B 之间的距离是: {dist_ab}") # 结果应该是 5.0 # 尝试计算其他点之间的距离 point_c = {'x': 0, 'y': 0} point_d = {'x': 5, 'y': 0} dist_cd = calculate_distance(point_c, point_d) print(f"点 C 和点 D 之间的距离是: {dist_cd}") # 结果应该是 5.0
- 引导与讨论: 带领学生一步步理解算法的每个步骤如何转换为代码。强调如何使用字典来组织点的坐标,如何使用
math
模块,以及如何用函数把这段逻辑打包。
5. 解决问题:结合数据结构、循环和数学 (15 分钟)
- 问题示例:计算列表中所有大于 10 的数字的平方根的平均值。
- 思考步骤 (算法):
- 准备一个列表,里面有一些数字。
- 初始化一个变量来累加符合条件的数字的平方根的总和,初始值为 0。
- 初始化一个变量来计数符合条件的数字有多少个,初始值为 0。
- 遍历列表中的每一个数字。
- 对于每个数字,判断它是否大于 10。
- 如果数字大于 10:
- 计算这个数字的平方根(使用
math.sqrt
)。 - 将平方根加到总和变量里。
- 计数器变量加一。
- 计算这个数字的平方根(使用
- 遍历结束后,检查计数器是否大于 0 (避免除以零)。
- 如果计数器大于 0,计算平均值:总和除以计数。
- 如果计数器等于 0,说明没有符合条件的数字,平均值可以设为 0 或者打印提示信息。
- 打印计算得到的平均值。
- 思考步骤 (算法):
- 用代码实现这个算法:
import math # 定义一个函数来计算符合条件的数字的平方根的平均值 # 参数 numbers_list 是数字列表,threshold 是阈值(比如 10) def average_sqrt_of_filtered_numbers(numbers_list, threshold): sum_of_sqrt = 0 # 初始化平方根总和 count_filtered = 0 # 初始化符合条件的数字计数 # 遍历列表中的每个数字 for num in numbers_list: # 判断数字是否大于阈值 if num > threshold: # 计算平方根(先检查数字是否非负,虽然这个例子假定数字是正的) if num >= 0: sqrt_val = math.sqrt(num) sum_of_sqrt = sum_of_sqrt + sqrt_val # 累加平方根 count_filtered = count_filtered + 1 # 计数加一 # else: # 如果数字小于0,平方根是复数,这里忽略或者特殊处理 # 计算平均值 average = 0.0 # 默认平均值为 0.0 if count_filtered > 0: # 避免除以零 average = sum_of_sqrt / count_filtered # 返回平均值 return average # --- 主程序部分 --- my_numbers = [15, 4, 20, 8, 12, 5, 25] filter_threshold = 10 # 调用函数计算平均值 avg = average_sqrt_of_filtered_numbers(my_numbers, filter_threshold) # 打印结果 print(f"数字列表: {my_numbers}") print(f"只计算大于 {filter_threshold} 的数字的平方根的平均值") print(f"计算结果: {avg:.2f}") # 格式化输出两位小数
- 引导与讨论: 带领学生理解如何用循环遍历列表,用条件判断进行筛选,用累加器计算总和和个数,最后计算平均值。强调这是把多种编程结构组合起来解决问题。
6. 课堂练习 (15 分钟)
让学生独立完成以下练习:
- 练习 1: 编写一个程序,计算并打印一个直角三角形斜边的长度。让用户输入两条直角边的长度(可能是小数)。斜边长度公式:
sqrt(a² + b²)
。(提示:使用math.sqrt
和math.pow
或**
)。import math # TODO: 获取用户输入的直角边 a 和 b 的长度 (转换为浮点数) # TODO: 计算斜边长度 # TODO: 打印结果
- 练习 2: 编写一个程序,有一个数字列表
temperatures = [25.5, 26.0, 24.8, 27.1, 23.9]
。计算并打印列表中所有温度的平均值和最高温度。(提示:使用sum()
和len()
计算平均值,使用max()
找出最高温度)。 - 练习 3: 编写一个程序,有一个商品字典
items = {"apple": 3.5, "banana": 2.0, "orange": 4.0, "grape": 6.0}
。找出并打印出价格低于 3.0 元的商品名称和价格。
7. 总结与提问 (5 分钟)
- 回顾: 回顾本节课内容:
math
模块的更多实用功能 (ceil
,floor
,fabs
),如何用列表和字典组织数学问题的数据,解决问题时的“算法”概念(步骤),以及如何把math
模块、数据结构、循环、条件判断和函数结合起来解决综合问题。 - 提问:
math.ceil(4.1)
和math.floor(4.9)
的结果分别是多少?- 计算一个负数的绝对值用什么函数?
- 在解决两点距离问题时,我们用字典存坐标有什么好处?
- 在解决平均平方根问题时,我们为什么要用循环和条件判断?
- “算法”简单来说是什么?
- 答疑: 回答学生问题。
8. 布置课后作业 (5 分钟)
- 作业 1: 编写一个函数
calculate_cylinder_volume(radius, height)
,接收圆柱体的半径和高作为参数,计算并返回圆柱体的体积。(体积公式:π * 半径² * 高)。在主程序中调用函数并打印结果。 - 作业 2: 编写一个程序,有一个数字列表
nums = [1, -2, 3, -4, 5, -6]
。创建一个新的列表,将原列表中所有数字的绝对值添加到新列表中,并打印新列表。(提示:遍历原列表,使用math.fabs()
计算绝对值,添加到新列表)。 - 作业 3: 编写一个程序,有一个学生分数字典
grades = {"小明": 75, "小红": 92, "小刚": 60, "小丽": 88, "小强": 50}
。找出并打印出分数最高的学生的名字和分数。(提示:遍历字典的 items,比较分数,记录最高分和对应的名字)。 - 作业 4: (选做) 编写一个程序,有一个数字列表。找出列表中所有能被 3 整除的数字,计算它们的总和。找出列表中所有能被 5 整除的数字,计算它们的总和。最后打印两个总和。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)