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

มาใช้งานฟังก์ชันทางคณิตศาสตร์ด้วยโมดูล math ของ Python กันเถอะ!

หากต้องการเรียกใช้ Python ผ่าน Command Prompt หรือ PowerShell บนคอมพิวเตอร์ของคุณ คุณจำเป็นต้องดาวน์โหลดและติดตั้ง Python ก่อน
หากคุณยังไม่ได้ติดตั้ง กรุณาดูบทความ การติดตั้ง Python และการตั้งค่าสภาพแวดล้อมการพัฒนา เพื่อทำการติดตั้ง Python

เวลาสร้างเว็บไซต์หรือพัฒนาแอปพลิเคชัน คุณเคยเจอกับสถานการณ์ที่รู้สึกว่า "จำเป็นต้องมีการคำนวณที่ซับซ้อนขึ้นมาหน่อย..." บ้างไหมครับ? ตัวอย่างเช่น การจัดวางองค์ประกอบเป็นรูปวงกลม หรือการทำให้การเคลื่อนไหวของอนิเมชันใกล้เคียงกับกฎทางฟิสิกส์ ใน럴 때 พระเอกของเราก็คือ โมดูล math ที่มีมาให้ใน Python เป็นมาตรฐานครับ

โมดูล math มีฟังก์ชันและค่าคงที่มากมายที่ช่วยให้เราทำการคำนวณทางคณิตศาสตร์ต่างๆ เช่น รากที่สอง, ฟังก์ชันตรีโกณมิติ, และลอการิทึม ได้อย่างง่ายดาย ในบทความนี้ เราจะอธิบายตั้งแต่วิธีการใช้งานพื้นฐานของโมดูล math ไปจนถึงตัวอย่างการประยุกต์ใช้ พร้อมโค้ดที่นักสร้างสรรค์เว็บสามารถคัดลอกไปใช้ได้ทันที เพื่อให้คุณได้สัมผัสกับประสบการณ์ "โค้ดที่ใช้งานได้จริง" และรับรู้ถึงพลังของการคำนวณทางคณิตศาสตร์กันครับ!


พื้นฐานของโมดูล math

ขั้นตอนแรกในการใช้งานโมดูล math คือการนำเข้า (import) โมดูลเข้ามาในสคริปต์ Python ของเรา เพียงแค่เขียนโค้ดหนึ่งบรรทัดว่า import math ไว้ที่ตอนต้นของโค้ด แค่นี้เราก็สามารถใช้งานฟังก์ชันทั้งหมดของ math ได้แล้วครับ

เรามาลองนำเข้าและแสดงค่าพาย (𝜋) กันเลยดีกว่า ในโมดูล math ค่าพายถูกกำหนดไว้เป็นค่าคงที่ชื่อ math.pi ครับ

import math

# แสดงค่าพาย (π)
print(math.pi)
# ผลลัพธ์: 3.141592653589793

เช่นเดียวกัน เราสามารถเรียกใช้ค่าคงที่เนเปียร์ (Napier's number) 𝑒 ซึ่งเป็นฐานของลอการิทึมธรรมชาติ ได้ง่ายๆ ด้วย math.e ครับ

import math

# แสดงค่าคงที่เนเปียร์ e
print(math.e)
# ผลลัพธ์: 2.718281828459045

ฟังก์ชันที่มีประโยชน์และใช้บ่อย

โมดูล math มีฟังก์ชันมากมาย แต่ในที่นี้เราจะคัดเลือกเฉพาะฟังก์ชันที่เป็นประโยชน์อย่างยิ่งสำหรับการสร้างเว็บและการประมวลผลข้อมูลมาแนะนำครับ

การปัดเศษขึ้นและลง: `ceil()` และ `floor()`

ในการจัดการกับตัวเลข บ่อยครั้งที่เราต้องการปัดเศษทศนิยมขึ้นหรือลง ตัวอย่างเช่น การคำนวณจำนวนหน้าทั้งหมดในระบบ Pagination

จำง่ายๆ ว่า ceil มาจาก "ceiling" (เพดาน) และ floor คือ "พื้น" ครับ

import math

# ปัดเศษทศนิยมขึ้น
print(math.ceil(3.14))
# ผลลัพธ์: 4

# ปัดเศษทศนิยมลง
print(math.floor(3.14))
# ผลลัพธ์: 3

รากที่สอง: `sqrt()`

เราใช้ math.sqrt(x) เพื่อคำนวณรากที่สอง (square root) ซึ่งมีประโยชน์มากในการออกแบบเว็บ เช่น เมื่อต้องการหาความยาวของด้านสี่เหลี่ยมจัตุรัสจากพื้นที่ ข้อควรระวังคือห้ามใส่จำนวนลบเป็นอาร์กิวเมนต์เพราะจะทำให้เกิดข้อผิดพลาดครับ

import math

# คำนวณรากที่สองของ 9
print(math.sqrt(9))
# ผลลัพธ์: 3.0

# คำนวณรากที่สองของ 2
print(math.sqrt(2))
# ผลลัพธ์: 1.4142135623730951

เลขยกกำลัง: `pow()`

การคำนวณเลขยกกำลัง เช่น X ยกกำลัง Y สามารถทำได้ด้วย math.pow(x, y) ซึ่งมีประโยชน์คล้ายกับฟังก์ชัน pow() ใน CSS สำหรับการคำนวณ easing curve ของอนิเมชันด้วยตัวเอง หรือการหาอัตราส่วนการย่อ-ขยายที่ซับซ้อน

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()` และการแปลงมุม

ฟังก์ชันตรีโกณมิติเป็นเครื่องมือที่ขาดไม่ได้สำหรับการแสดงผลที่สร้างสรรค์ เช่น การจัดวางองค์ประกอบเป็นวงกลม, อนิเมชันคลื่น, และการคำนวณมุม ในโมดูล math ของ Python เราสามารถใช้ sin(), cos(), tan() และอื่นๆ ได้

【สำคัญ】 ฟังก์ชันตรีโกณมิติในโมดูล math จะรับอาร์กิวเมนต์เป็นหน่วย เรเดียน (radian) ไม่ใช่ "องศา (degree)" ที่เราคุ้นเคย ดังนั้นต้องระวังนะครับ แต่ไม่ต้องกังวลไป เพราะมีฟังก์ชันสำหรับแปลงระหว่างองศาและเรเดียนเตรียมไว้ให้แล้ว

ตัวอย่างเช่น เรามาคำนวณค่าไซน์ (sin) ของมุม 45 องศากันครับ

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 จุด (ทฤษฎีบทพีทาโกรัส)

เมื่อเราทราบพิกัดขององค์ประกอบ 2 ชิ้นบนหน้าเว็บ (จุด A และจุด B) เราสามารถคำนวณระยะทางในแนวเส้นตรงระหว่างสองจุดนั้นได้ โดยใช้ทฤษฎีบทพีทาโกรัส $c = \sqrt{a^2 + b^2}$ ซึ่งฟังก์ชัน sqrt() และ pow() ของโมดูล math จะมีบทบาทสำคัญที่นี่ครับ

ใน 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

【มาลองทำกัน!】สร้างไฟล์ HTML ด้วย Python

โค้ดที่ผ่านมาทั้งหมดแสดงผลลัพธ์แค่ในเทอร์มินัล (หน้าจอสีดำ) เท่านั้น ในฐานะนักสร้างสรรค์เว็บ ความรู้สึกว่า "มันใช้ได้แล้ว!" จะเกิดขึ้นก็ต่อเมื่อได้เห็นผลลัพธ์ปรากฏบนเบราว์เซอร์ใช่ไหมครับ

ในตัวอย่างถัดไป เราจะมาแนะนำวิธีการสร้างไฟล์ HTML แบบไดนามิกด้วย Python กันครับ เป็นสคริปต์ที่คำนวณตัวเลข 1 ถึง 10 พร้อมกับรากที่สองของแต่ละตัว แล้วแสดงผลลัพธ์เป็นตาราง (table) ลงในไฟล์ HTML

ลองบันทึกโค้ด Python ด้านล่างนี้เป็นชื่อไฟล์ว่า generate_html.py แล้วรันดูครับ จะมีไฟล์ชื่อ math_table.html ถูกสร้างขึ้นมาในโฟลเดอร์เดียวกัน

<!-- โค้ด Python: generate_html.py -->
import math

# ส่วนเริ่มต้นของ HTML
html_content = """
<!DOCTYPE html>
<html lang="th">
<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 และเทคโนโลยีเว็บได้หลอมรวมกัน!

<!-- HTML ที่ถูกสร้างขึ้น: math_table.html -->
<!DOCTYPE html>
<html lang="th">
<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 ไม่ใช่ integer การตระหนักถึงชนิดข้อมูลเป็นสิ่งสำคัญเพื่อป้องกันพฤติกรรมที่ไม่คาดคิด
  3. ข้อผิดพลาดของโดเมน (Domain Error): จะเกิดข้อผิดพลาดเมื่อพยายามทำการคำนวณที่เป็นไปไม่ได้ทางคณิตศาสตร์ ตัวอย่างเช่น การพยายามหารากที่สองของจำนวนลบจะทำให้เกิด ValueError: math domain error ควรสร้างนิสัยในการตรวจสอบค่าอินพุตครับ
import math

try:
    # เมื่อพยายามคำนวณรากที่สองของจำนวนลบ...
    result = math.sqrt(-1)
except ValueError as e:
    # จะเกิดข้อผิดพลาดขึ้น!
    print(f"เกิดข้อผิดพลาด: {e}")

# ผลลัพธ์:
# เกิดข้อผิดพลาด: math domain error

สรุป

ในครั้งนี้เราได้สำรวจการใช้โมดูล math ของ Python ตั้งแต่การคำนวณพื้นฐานทางคณิตศาสตร์, ฟังก์ชันตรีโกณมิติ, ไปจนถึงการแสดงผลลัพธ์เป็น HTML หากคุณใช้โมดูล math ได้อย่างคล่องแคล่ว ไม่เพียงแต่จะสามารถทำให้การคำนวณที่เคยทำด้วยมือหรือเครื่องคิดเลขเป็นแบบอัตโนมัติได้ แต่ยังเป็นการเปิดประตูสู่การนำฟังก์ชันที่มีความซับซ้อนและโต้ตอบได้มากขึ้นมาใช้ในเว็บไซต์และแอปพลิเคชันของคุณอีกด้วย

เริ่มต้นจากการคัดลอกและรันโค้ดในบทความนี้ เมื่อคุ้นเคยแล้วก็ลองท้าทายตัวเองด้วยการคำนวณและการแสดงผลในแบบของคุณเองดูนะครับ มาผสมผสานความคิดสร้างสรรค์ของคุณเข้ากับพลังการคำนวณของ Python เพื่อสร้างสรรค์ไอเดียใหม่ๆ ให้เป็นจริงกันเถอะ!

ขั้นตอนต่อไป

หลังจากคำนวณทางคณิตศาสตร์แล้ว ลองสร้างการเคลื่อนไหวและความหลากหลายโดยใช้ค่าสุ่มดูไหมครับ? บทความถัดไปจะอธิบายวิธีใช้โมดูล random เพื่อสร้างค่าที่คาดเดาไม่ได้เหมือนกับการทอยลูกเต๋า

วิธีสร้างค่าสุ่มด้วยโมดูล random