Copicode 日本語トップ

มาใช้งานฟังก์ชันทางคณิตศาสตร์ด้วยโมดูล 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