🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

玩转Python math模块,精通数学函数!

要在电脑上通过命令提示符或 PowerShell 运行 Python,需要先下载并安装 Python。
如果你还没有安装,请参考Python安装与开发环境配置一文来完成安装。

在制作网站或开发应用程序时,你是否遇到过“需要进行一些复杂计算”的场景?例如,将元素按圆形排列,或者让动画的动作更接近物理定律。在这种时候,Python内置的math模块就能大显身手了。

math模块提供了用于轻松执行各种数学计算的函数和常量,例如平方根、三角函数和对数。在本文中,我们将为网页开发者们通俗易懂地解说math模块的基本用法到应用示例,并提供可直接复制粘贴运行的代码。让我们一起体验“代码运行起来”的感觉,感受数学计算的强大力量吧!


math模块的基础知识

使用math模块的第一步是在Python脚本中导入该模块。只需在代码的开头写上一行import math即可。仅仅这一行,你就可以使用math模块提供的所有功能了。

让我们马上导入并显示圆周率π(pi)吧。在math模块中,它被定义为一个名为math.pi的常量。

import math

# 显示圆周率π
print(math.pi)
# 输出: 3.141592653589793

同样地,自然对数的底数,即纳皮尔数𝑒,也可以通过math.e轻松调用。

import math

# 显示纳皮尔数e
print(math.e)
# 输出: 2.718281828459045

常用的便捷函数

math模块中有很多函数,但在这里,我们将挑选并介绍一些在网页制作和数据处理中特别有用的函数。

向上取整和向下取整: `ceil()` 与 `floor()`

在处理数字时,我们经常需要将小数部分向上或向下取整。例如,在计算分页的总页数时。

ceil记作“天花板(ceiling)”,将floor记作“地板(floor)”,就很容易理解了。

import math

# 向上取整
print(math.ceil(3.14))
# 输出: 4

# 向下取整
print(math.floor(3.14))
# 输出: 3

平方根: `sqrt()`

要计算平方根(根号),可以使用math.sqrt(x)。这在网页设计中很有用,比如当你想根据正方形的面积求边长时。请注意,如果参数为负数,将会产生错误。

import math

# 计算9的平方根
print(math.sqrt(9))
# 输出: 3.0

# 计算2的平方根
print(math.sqrt(2))
# 输出: 1.4142135623730951

幂运算: `pow()`

像X的Y次方这样的幂运算,可以使用math.pow(x, y)来完成。就像CSS的pow()函数一样,它在自己计算动画的缓动曲线或求解复杂的缩放率时非常有用。

import math

# 计算2的3次方
print(math.pow(2, 3))
# 输出: 8.0

# 计算5的0.5次方 (即5的平方根)
print(math.pow(5, 0.5))
# 输出: 2.23606797749979

三角函数: `sin()`, `cos()`, `tan()` 与角度转换

三角函数是创意表达中不可或缺的工具,例如元素的圆形布局、波浪动画、角度计算等。在Python的math模块中,可以使用sin(), cos(), tan()等函数。

【重要】 math模块的三角函数接受的参数是弧度 (radian)。请注意,这不同于我们平时使用的“度 (degree)”。不过别担心,模块也提供了方便的函数用于在角度和弧度之间进行转换。

例如,让我们来计算45度的正弦(sin)值。

import math

# 将45度转换为弧度
angle_rad = math.radians(45)
print(f"45度 = {angle_rad} 弧度")

# 计算sin(45度)
sin_value = math.sin(angle_rad)
print(f"sin(45度) = {sin_value}")

# sin(45度) 等于 1/√2,约等于0.707
# 输出:
# 45度 = 0.7853981633974483 弧度
# sin(45度) = 0.7071067811865476

实践应用示例

那么,让我们结合目前所学的函数,来进行一些更实际的计算吧。

应用示例1: 计算圆的面积和周长

这是一个计算半径为5的圆的面积和周长的程序。面积可以通过“半径 × 半径 × 圆周率”来计算,周长可以通过“直径 × 圆周率”来计算。

import math

radius = 5  # 半径

# 计算面积 (π * r^2)
area = math.pi * math.pow(radius, 2)

# 计算周长 (2 * π * r)
circumference = 2 * math.pi * radius

print(f"半径为{radius}的圆:")
print(f"  面积: {area}")
print(f"  周长: {circumference}")

# 输出:
# 半径为5的圆:
#   面积: 78.53981633974483
#   周长: 31.41592653589793

应用示例2: 计算两点之间的距离(勾股定理)

当你知道网页上两个元素(点A和点B)的坐标时,可以计算它们之间的直线距离。这可以通过勾股定理 $c = \sqrt{a^2 + b^2}$ 来求解。math模块的sqrt()pow()函数在这里就派上用场了。

在Python 3.8及更高版本中,还增加了一个专门用于此计算的函数math.dist()

import math

# 点A和点B的坐标
p1 = (10, 20)  # (x1, y1)
p2 = (50, 80)  # (x2, y2)

# 计算x和y的差值
dx = p2[0] - p1[0]
dy = p2[1] - p1[1]

# 使用勾股定理计算距离
# distance = sqrt(dx^2 + dy^2)
distance = math.sqrt(math.pow(dx, 2) + math.pow(dy, 2))

print(f"{p1} 和 {p2} 之间的距离是: {distance}")

# 在Python 3.8及以上版本中,可以使用 math.dist() 一步到位
# distance_alt = math.dist(p1, p2)
# print(f"使用 math.dist() 的结果: {distance_alt}")

# 输出:
# (10, 20) 和 (50, 80) 之间的距离是: 72.11102550927978

【动手体验】用Python生成HTML文件

好了,到目前为止,所有的代码都只是在终端(黑色的屏幕)上显示结果。作为网页开发者,只有在浏览器中看到结果,才会有“成功了!”的真实感,对吧?

在下一个例子中,我们将介绍如何使用Python动态生成HTML文件。这是一个计算1到10的数字及其平方根,并将结果输出为HTML文件中的表格的脚本。

请将下面的Python代码保存为generate_html.py之类的文件名并运行它。在同一个文件夹下,应该会生成一个名为math_table.html的文件。

<!-- Python代码: generate_html.py -->
import math

# HTML的起始部分
html_content = """
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>平方根表</title>
    <style>
        body { font-family: sans-serif; background-color: #121212; color: #e0e0e0; display: grid; place-items: center; min-height: 100vh; margin: 0; }
        table { border-collapse: collapse; width: 80%; max-width: 400px; box-shadow: 0 4px 10px rgba(0,0,0,0.5); }
        th, td { border: 1px solid #5f6368; padding: 12px; text-align: center; }
        thead { background-color: #669df6; color: #121212; }
        tbody tr:nth-child(odd) { background-color: #1e1e1e; }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>数值</th>
                <th>平方根</th>
            </tr>
        </thead>
        <tbody>
"""

# 循环遍历1到10的数字,并生成表格行
for i in range(1, 11):
    sqrt_value = math.sqrt(i)
    html_content += f"            <tr>\n"
    html_content += f"                <td>{i}</td>\n"
    html_content += f"                <td>{sqrt_value:.4f}</td>\n" # 格式化为4位小数
    html_content += f"            </tr>\n"

# HTML的结束部分
html_content += """
        </tbody>
    </table>
</body>
</html>
"""

# 将内容写入HTML文件
with open("math_table.html", "w", encoding="utf-8") as f:
    f.write(html_content)

print("math_table.html 已生成!")

然后,这个脚本生成的math_table.html文件的内容就在这里。在浏览器中打开这个HTML文件,你会看到一个格式精美的表格。这正是Python的计算能力与Web技术融合的瞬间!

<!-- 生成的HTML: math_table.html -->
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>平方根表</title>
    <style>
        body { font-family: sans-serif; background-color: #121212; color: #e0e0e0; display: grid; place-items: center; min-height: 100vh; margin: 0; }
        table { border-collapse: collapse; width: 80%; max-width: 400px; box-shadow: 0 4px 10px rgba(0,0,0,0.5); }
        th, td { border: 1px solid #5f6368; padding: 12px; text-align: center; }
        thead { background-color: #669df6; color: #121212; }
        tbody tr:nth-child(odd) { background-color: #1e1e1e; }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>数值</th>
                <th>平方根</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>1.0000</td>
            </tr>
            <tr>
                <td>2</td>
                <td>1.4142</td>
            </tr>
            <tr>
                <td>3</td>
                <td>1.7321</td>
            </tr>
            <tr>
                <td>4</td>
                <td>2.0000</td>
            </tr>
            <tr>
                <td>5</td>
                <td>2.2361</td>
            </tr>
            <tr>
                <td>6</td>
                <td>2.4495</td>
            </tr>
            <tr>
                <td>7</td>
                <td>2.6458</td>
            </tr>
            <tr>
                <td>8</td>
                <td>2.8284</td>
            </tr>
            <tr>
                <td>9</td>
                <td>3.0000</td>
            </tr>
            <tr>
                <td>10</td>
                <td>3.1623</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

需要注意的地方

math模块非常强大,但也有几点需要注意。

  1. 不要忘记import math: 这是所有操作的基础。如果忘记了,就会出现NameError: name 'math' is not defined的错误。
  2. 函数返回值大多是浮点数(float): 正如math.sqrt(9)的结果是3.0而不是3一样,许多函数返回的是float类型而不是整数。意识到类型的重要性,可以防止意外的行为。
  3. 定义域错误(Domain Error): 当你尝试进行数学上不可能的计算时,会发生错误。例如,尝试计算负数的平方根会引发ValueError: math domain error。养成检查输入值的习惯吧。
import math

try:
    # 尝试计算负数的平方根时...
    result = math.sqrt(-1)
except ValueError as e:
    # 会发生错误!
    print(f"发生了错误: {e}")

# 输出:
# 发生了错误: math domain error

总结

这次我们探讨了如何使用Python的math模块,从基本的数学计算到三角函数,再到将计算结果输出为HTML的方法。熟练使用math模块,不仅可以自动化那些以前需要手动或用计算器完成的计算,还为在网站和应用程序中实现更高级、更具交互性的功能开辟了道路。

先从复制粘贴本文的代码并运行开始,熟悉之后,再尝试挑战自己的计算和表达方式。将你的创造力与Python的计算能力相结合,把新的想法变为现实吧!

下一步

在掌握了数学计算之后,要不要试试用随机值来创造动态和变化?下一篇文章将解说如何使用random模块来生成像掷骰子一样不可预测的值。

使用random模块生成随机值的方法