查看全课大纲(第 50 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
math 模块怎么用?
约 2 分钟
小象实战讲义 · Python 编程从入门到实践
写程序时经常要做数学计算:求平方根、取圆周率、算三角函数等。Python 内置的 math 模块提供了这些常用函数和常数,不需要额外安装。本节是第 6 章《一些常用的函数》的第 4 节,你会学到如何导入 math、怎样查看它提供了哪些功能,并把它和之前学过的 matplotlib 结合起来画一条函数曲线。
💡 核心导读
- 导入:
import math之后,用math.函数名调用。 - 查功能:
dir(math)可以列出模块里的所有名称。 - 常用成员:常数
math.pi、函数math.sqrt()等。 - 实践:用
math.sqrt计算一组 y 值,再用matplotlib画出y = sqrt(x)的曲线。
导入 math 模块并查看功能
math 是一个工具包,主要提供常用的数学运算函数。和其他模块一样,先导入再使用:
import math导入后如果不知道它有哪些功能,可以用 dir() 把模块里的名称列出来。不同 Python 版本的条目会略有差异,所以下面不直接打印整个列表,而是先确认几个常用名字是否存在,再实际取用常数和函数:
import math
# dir() 返回模块内所有名称组成的列表
all_names = dir(math)
print(type(all_names))
# 只检查几个常用名字是否在列表里,避免输出随版本变化
for name in ['pi', 'sqrt', 'sin', 'log']:
status = '有' if name in all_names else '无'
print('{}: {}'.format(name, status))
# 访问圆周率常数
print(math.pi)
# 求 4 的平方根
print(math.sqrt(4))<class 'list'>
pi: 有
sqrt: 有
sin: 有
log: 有
3.141592653589793
2.0输出里 有 表示该名字确实存在于 math 模块中。模块内的名称通过 math. 前缀访问:math.pi 是圆周率,math.sqrt(x) 返回 x 的平方根,结果是一个浮点数。
结合 matplotlib 绘制 y = sqrt(x)
math 负责计算,matplotlib 负责画图。下面把 0 到 199 的每个整数代入 math.sqrt 得到 y 值,再画成曲线:
import math
import matplotlib
matplotlib.use('Agg') # 使用不弹窗的后端,保证无图窗环境也能运行
import matplotlib.pyplot as plt
# x 取 0 到 199 的整数
X = list(range(0, 200))
# 对每个 x 求平方根,得到对应的 y
Y = [math.sqrt(x) for x in X]
plt.figure(figsize=(5, 5))
plt.plot(X, Y)
plt.close() # 释放图形资源
print('已绘制 y = sqrt(x) 的函数图像,共', len(X), '个点')已绘制 y = sqrt(x) 的函数图像,共 200 个点代码做了三件事:构造 x 列表、用列表推导式逐个求平方根得到 y 列表、把 (X, Y) 交给 plot 连成曲线。这条曲线就是 y = sqrt(x)。代码里用 plt.close() 释放图形;如果你想在本机窗口里看图,可以在 plot 之后改用 plt.show()。
📝 动手练一练
- 一个直角三角形的两条直角边分别是 3 和 4,请用
math模块计算斜边长度。
👉 点击查看参考答案
思路:勾股定理是 c = sqrt(a ** 2 + b ** 2),用 math.sqrt 对平方和开方即可。
import math
a = 3
b = 4
c = math.sqrt(a ** 2 + b ** 2)
print('直角边为 {} 和 {} 的三角形,斜边长度为:{}'.format(a, b, c))直角边为 3 和 4 的三角形,斜边长度为:5.0常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
sqrt(4) | NameError: name 'sqrt' is not defined | 没有加 math. 前缀,当前作用域里找不到 sqrt | math.sqrt(4) |
print(Pi) | NameError: name 'Pi' is not defined | 名称大小写敏感,模块里的常数写作小写 pi | print(math.pi) |
math.sqrt(-1) | ValueError: math domain error | 实数范围内负数没有平方根 | 先判断参数不小于 0,本节不处理复数开方 |
小结
math是 Python 内置的数学模块,提供常用的数学函数和常数。- 使用前需要
import math,之后用math.函数名调用。 dir(math)可以查看模块提供的所有名称。math.pi是圆周率常数,math.sqrt(x)返回 x 的平方根(浮点数)。math的多数函数面向实数运算,参数超出定义域(如对负数开平方)会抛出ValueError。
📋 行动清单
- 导入
math后执行dir(math),从中挑两个没用过的函数试调用一次。 - 把绘图示例里的
math.sqrt换成math.sin,重新运行,观察代码是否仍然能跑通。 - 用
math.pi计算半径为 5 的圆的面积(pi * r ** 2)和周长(2 * pi * r)。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第6章代码包:math(含1 个 Notebook)ZIP · 556B