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

Pythonのmathモジュールで数学関数を使いこなそう!

PythonをコマンドプロンプトやPowerShellでPC上で動かすには、Pythonをダウンロードしてインストールする必要があります。
まだの方はPythonのインストールと開発環境の構築の記事を参考にして、Pythonをインストールしてください。

Webサイト制作やアプリ開発をしていると、「ちょっと複雑な計算が必要だな…」と感じる場面はありませんか?例えば、要素を円形に配置したり、アニメーションの動きを物理法則に近づけたり。そんな時に大活躍するのが、Pythonに標準で組み込まれているmathモジュールです。

mathモジュールは、平方根や三角関数、対数といった、さまざまな数学的な計算を簡単に行うための関数や定数を提供してくれます。この記事では、Webクリエーターの皆さんがすぐに使えるように、mathモジュールの基本的な使い方から応用例まで、コピペで動かせるコードと共に分かりやすく解説していきます。「動く」を体験しながら、数学計算のパワーを実感してみましょう!


mathモジュールの基本

mathモジュールを使うための第一歩は、Pythonのスクリプト内でモジュールをインポートすることです。これにはimport mathという一行をコードの冒頭に記述するだけ。たったこれだけで、mathが持つすべての機能を使えるようになります。

さっそく、インポートして円周率 𝜋 (パイ) を表示させてみましょう。mathモジュールでは、math.piという定数として定義されています。

import math

# 円周率πを表示する
print(math.pi)
# 出力: 3.141592653589793

同様に、自然対数の底であるネイピア数 𝑒 もmath.eで簡単に呼び出せます。

import math

# ネイピア数eを表示する
print(math.e)
# 出力: 2.718281828459045

よく使う便利な関数たち

mathモジュールにはたくさんの関数がありますが、ここでは特にWeb制作やデータ処理で役立つものをピックアップして紹介します。

切り上げと切り捨て: `ceil()` と `floor()`

数値を扱う際、小数点以下を切り上げたり切り捨てたりしたい場面はよくあります。例えば、ページネーションで総ページ数を計算するときなどです。

ceilは「天井(ceiling)」、floorは「床(floor)」と覚えると分かりやすいですね。

import math

# 小数点以下を切り上げる
print(math.ceil(3.14))
# 出力: 4

# 小数点以下を切り捨てる
print(math.floor(3.14))
# 出力: 3

平方根: `sqrt()`

平方根(ルート)を計算するにはmath.sqrt(x)を使います。Webデザインで正方形の面積から一辺の長さを求めたい時などに便利です。引数に負の数を入れるとエラーになるので注意してください。

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: 2点間の距離を計算する(ピタゴラスの定理)

Webページ上の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ファイルを生成する

さて、ここまでのコードはターミナル(黒い画面)に結果を表示するだけでした。Webクリエーターとしては、やはりブラウザに表示してこそ「動いた!」という実感が湧きますよね。

次の例では、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="ja">
<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="ja">
<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ではなく3.0になるように、多くの関数は整数ではなく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モジュールを使いこなせば、これまで手作業や電卓で行っていた計算を自動化できるだけでなく、Webサイトやアプリケーションに、より高度でインタラクティブな機能を実装する道が開けます。

まずはこの記事のコードをコピペして動かしてみることから始め、慣れてきたら自分なりの計算や表現に挑戦してみてください。あなたのクリエイティビティとPythonの計算能力を掛け合わせ、新しいアイデアを形にしていきましょう!

次のステップへ

数学的な計算の次は、ランダムな値を使って動きやバリエーションを生み出してみませんか?次の記事では、サイコロの目のように予測不能な値を生成するrandomモジュールの使い方を解説します。

randomモジュールでランダムな値を生成する方法