教程建议 35 分钟学习等级 2/8

PYTHON LESSON 020

数学工具箱

学会 import math,熟练使用 sqrt、pow、floor、ceil、fabs 等常用数学函数。

00 · 学习目标

这一课要解决什么?

先想一想开平方、取整、圆周率……难道每道题都要自己造轮子吗?
完成任务数学函数百宝箱
学习顺序定义 → 语法 → 最小实例 → 独立练习

学完后,你应该能够

  • import math 导入数学库
  • math.sqrt(x) 开平方 / math.pow(x, y) 求 x 的 y 次方
  • math.floor / math.ceil / math.fabs 取整与绝对值

01 · 核心概念

math 库常用数学函数

math 库常用数学函数:Python 把很多好用的函数分门别类放在“库”里,math 就是数学工具箱。用 import math 把它搬进来,之后每个工具都以 math. 开头调用,一看就知道是谁家的函数。

考级对应GESP Python 2 级 · 常用数学函数GESP Python 2 级 · 基本运算
学习边界

标准库非常大,本章覆盖课程会实际依赖的入口;具体函数签名应结合本站条目与运行时帮助查询。

02 · 语法与规则

先记住这 3 条,再开始写程序

01import math 导入数学库

先准确读出这条写法的结构与作用。

02math.sqrt(x) 开平方 / math.pow(x, y) 求 x 的 y 次方

换一组最小数据,手工推演一次结果。

03math.floor / math.ceil / math.fabs 取整与绝对值

再用边界值或反例确认它的适用条件。

03 · 完整实例

代码、运行结果和解释放在一起看

math-toolbox.pyPYTHON 3.12
# 数学工具箱:math 库的六件法宝
import math

print("16 的平方根:", math.sqrt(16))
print("2 的 10 次方:", math.pow(2, 10))
print("9.7 向下取整:", math.floor(9.7))
print("9.2 向上取整:", math.ceil(9.2))
print("-5.5 的绝对值:", math.fabs(-5.5))
print("圆周率:", math.pi)

# 实战:计算半径为 3 的圆面积
r = 3
area = math.pi * math.pow(r, 2)
print("半径为", r, "的圆面积是", area)
运行结果OUTPUT
16 的平方根: 4.0
2 的 10 次方: 1024.0
9.7 向下取整: 9
9.2 向上取整: 10
-5.5 的绝对值: 5.5
圆周率: 3.141592653589793
半径为 3 的圆面积是 28.274333882308138

math.sqrt 和 math.pow 的结果都是 float,所以 16 的平方根显示为 4.0。

在新标签运行和修改这个实例已装入本课代码 · 可自定义输入 · 可提交判题

04 · 逐步理解

每一步只解决一个问题

  1. 01

    import:打开工具箱

    Python 把很多好用的函数分门别类放在“库”里,math 就是数学工具箱。用 import math 把它搬进来,之后每个工具都以 math. 开头调用,一看就知道是谁家的函数。

    PYTHON
    import math
  2. 02

    sqrt 与 pow:乘方的左右手

    math.sqrt(16) 求平方根得 4.0;math.pow(2, 10) 求 2 的 10 次方得 1024.0。pow 也可以用 ** 运算符代替:2 ** 10。注意这两个函数的结果都是小数类型。

    PYTHON
    print(math.sqrt(25), 2 ** 10)
  3. 03

    floor 与 ceil:取整两兄弟

    floor 是“地板”,永远往下取整:math.floor(9.7) 得 9;ceil 是“天花板”,永远往上取整:math.ceil(9.2) 得 10。它们的结果是整数,和 round 的四舍五入不是一回事。

    PYTHON
    print(math.floor(9.7), math.ceil(9.2))
  4. 04

    fabs:距离多远都不怕

    math.fabs 求绝对值,-5.5 变成 5.5。算两个人分数差了多少、两点相距多远时特别有用。内置函数 abs 也能求绝对值,fabs 的结果是小数,abs 保持原类型。

    PYTHON
    print(math.fabs(-5.5), abs(-5))
  5. 05

    实战:圆面积公式

    圆面积 = π × r²。math.pi 给出精确的圆周率,math.pow(r, 2) 算出 r 的平方,两个一乘就是面积。把数学公式逐字翻译成代码,是理科计算的通用套路。

    PYTHON
    area = math.pi * math.pow(r, 2)
  6. 06

    工具箱大挑战

    已知直角三角形两条直角边是 3 和 4,斜边是多少?用 math.sqrt(3 ** 2 + 4 ** 2) 验证一下勾股定理。再查查 math 库还有什么宝贝:factorial、gcd……看到不认识的就 print 出来试试。

    PYTHON
    print(math.sqrt(3 ** 2 + 4 ** 2))

05 · 练习与检验

自己写出来,才算真正学会

本课实作步骤
  1. 1运行程序,认识六件数学法宝
  2. 2算出半径为 5 的圆面积
  3. 3用 floor 和 ceil 给 7.5 上下取整
  4. 4用 sqrt 算一算 2 的平方根约等于多少
打开本课编程实验室编辑、运行、测试、判题都在一个页面完成

06 · 完整知识

继续理解定义、规则和适用边界

第一次学习先完成上面的六个步骤;需要查定义、核对规则、分析误区或理解“为什么”时,再展开对应知识章。

程序组织模块、导入与常用标准库正确导入模块,并按用途查找 math、random、statistics、collections、heapq、bisect 等标准工具。

正式定义

模块是可导入的 Python 代码单元,包把模块组织成层次。import 先加载模块并创建模块对象,再把名字绑定到当前命名空间;标准库随 Python 分发,不等于第三方包。

必须掌握

  • import module 保留清晰命名空间;from module import name 只导入指定名字;避免 from module import *。
  • math 提供 sqrt、floor、ceil、gcd、log、sin 等数学函数和 pi、e 等常量。
  • random 用于伪随机模拟,不适合密码安全;需要安全随机时使用 secrets。
  • collections.deque 适合双端队列,Counter 适合计数,defaultdict 可按工厂创建缺省值。
  • heapq 实现最小堆,bisect 在已排序序列中二分定位,itertools 提供高效迭代组合工具。
  • if __name__ == '__main__': 用来区分文件被直接运行还是被导入。

常见误区

  • 文件名写成 math.py 导致遮蔽标准库
  • import * 污染命名空间
  • 把 random 当成加密随机数
  • 没有理解工具的数据复杂度就盲目调用

适用边界

  • 标准库非常大,本章覆盖课程会实际依赖的入口;具体函数签名应结合本站条目与运行时帮助查询。
  • Turtle 需要图形窗口,本站文本判题环境不伪造其画布。
打开本章完整示例与独立阅读页 →
数学基础计数原理、组合数与计算几何基础明确有序/无序、互斥/分步与几何退化边界,再把公式转为稳定程序。

正式定义

加法原理用于互斥方案分类求和,乘法原理用于依次完成步骤求积;排列关心顺序,组合不关心顺序。计算几何用坐标、向量、距离和方向关系把图形条件转成数值判定。

必须掌握

  • A(n,m)=n!/(n-m)!,C(n,m)=n!/(m!(n-m)!),并有 C(n,m)=C(n,n-m)。
  • 杨辉三角递推 C(n,m)=C(n-1,m-1)+C(n-1,m),边界 C(n,0)=C(n,n)=1。
  • 取模下的组合数算法取决于 n、模数是否为质数、查询次数和是否允许预处理。
  • 距离比较应优先比较平方,避免不必要的 sqrt 和浮点误差。
  • 三角形必须满足任意两边之和大于第三边;共线、重合、零长度是几何边界。
  • 浮点比较应按题目误差使用容差;整数坐标能用叉积时优先保持整数计算。

常见误区

  • 未判断顺序是否重要就套排列组合公式
  • 模意义下直接做普通除法
  • 浮点数直接用 ==
  • 漏掉共线或退化图形

适用边界

  • 概率需要在计数结果上再建立样本空间,不等同于组合数本身。
  • 复杂计算几何涉及方向、相交、凸包等更多主题,本章只覆盖课程实际使用的基础判定。
打开本章完整示例与独立阅读页 →
Python 基础程序执行、输入输出、变量与数据类型从一条语句怎样执行开始,系统掌握 print、input、变量、对象、类型与显式转换。

正式定义

Python 程序由语句和表达式组成,通常按从上到下的顺序执行。变量名通过赋值绑定到对象;对象有类型和值。input() 始终返回 str,是否转换成 int 或 float 必须由题意决定。

必须掌握

  • print(*objects, sep=' ', end='\n') 可以控制对象之间的分隔符和末尾字符。
  • input(prompt) 读取一行并去掉行末换行符,返回值一定是字符串。
  • 赋值符号 = 建立或更新名字与对象的绑定;== 才是相等比较。
  • 核心标量类型包括 int、float、bool、str 和 NoneType;bool 是 int 的子类,但语义上应当用于真假判断。
  • int、float、str、bool 可做显式类型转换;转换可能失败,不能把任意文本直接当数字。
  • 注释以 # 开始;规范的变量名应表达含义,不能使用关键字。

常见误区

  • 把 input() 的结果直接与整数相加
  • 混淆 = 与 ==
  • 用 float 表示必须精确的十进制金额却不考虑误差
  • 变量名覆盖 print、list 等内置名称

适用边界

  • 课程先讲同步的文本输入输出;文件、网络、图形界面和异步输入分别在对应章节说明。
  • Python 的变量没有固定类型,但对象有类型;这不等于程序可以随意混用类型。
打开本章完整示例与独立阅读页 →
Python 基础运算符、表达式与优先级完整区分算术、比较、逻辑、成员、身份和位运算,并用优先级表消除歧义。

正式定义

表达式求值得到一个值。运算符规定如何组合操作数;当一个表达式含多个运算符时,优先级和结合方向决定求值顺序,括号可以明确改变顺序。

必须掌握

  • / 总是得到浮点结果;// 是向负无穷方向取整的整除;% 与 // 满足 a == (a // b) * b + a % b。
  • 比较可以链式书写,如 0 <= x < 10;and/or 会短路并返回最后求值的操作数,不一定返回 bool。
  • == 比较值是否相等,is 比较是否为同一个对象;判断 None 应写 is None。
  • in/not in 做成员测试;对 dict 测试的是键。
  • 位运算作用于整数的二进制位;负整数按无限长二进制补码语义理解。
  • 复杂表达式即使能靠优先级正确运行,也应使用括号表达意图。

常见误区

  • 把 // 当成简单截断
  • 用 is 比较数字或字符串的值
  • 忘记 and 的优先级高于 or
  • 连续位移、比较和逻辑运算却不加括号

适用边界

  • 浮点数比较受二进制表示误差影响,需要按问题选择容差。
  • 运算符可由自定义类重载,因此相同符号对不同类型可能有不同语义。
打开本章完整示例与独立阅读页 →

完成检查

确认自己会解释、会编写、会验证