พื้นฐาน Python และสภาพแวดล้อมพัฒนา
UAT 104 การเขียนโปรแกรมคอมพิวเตอร์
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อธิบายการคิดเชิงคำนวณและขั้นตอนแก้ปัญหาด้วยโปรแกรม
- ติดตั้ง Python สร้างสภาพแวดล้อมเสมือน (venv) และติดตั้งไลบรารีจาก requirements.txt
- ใช้ตัวแปรและชนิดข้อมูลพื้นฐาน int, float, str และ bool
- เขียนโปรแกรมคำนวณและแปลงหน่วยของงานโดรน และจัดรูปแบบผลด้วย f-string
- อธิบายความคลาดเคลื่อนของเลขทศนิยมแบบ float และเปรียบเทียบค่าด้วย math.isclose
ทำไมต้องรู้
งานโดรนสมัยใหม่มีข้อมูลมากเกินกว่าจะทำด้วยมือ เที่ยวบินสำรวจหนึ่งเที่ยวอาจบันทึก telemetry หลายพันข้อความ การวางแผนภารกิจต้องคำนวณพลังงานซ้ำหลายรอบ และสถานีจอดอัตโนมัติต้องมีโปรแกรมตัดสินใจเอง การเขียนโปรแกรมจึงเป็นเครื่องมือพื้นฐานของนักเทคโนโลยีระบบอากาศยานไร้คนขับ เหมือนที่เครื่องคิดเลขเคยเป็นเครื่องมือพื้นฐานของวิศวกรรุ่นก่อน
วิชานี้ใช้ภาษา Python เพราะอ่านง่าย มีไลบรารีวิเคราะห์ข้อมูลที่ใช้กันทั่วโลก และมีไลบรารีสำหรับคุยกับโดรนโดยตรง เช่น pymavlink ซึ่งจะใช้ในโมดูล 4
คิดแบบคอมพิวเตอร์
Jeannette Wing (2006) เสนอว่า การคิดเชิงคำนวณ (computational thinking) เป็นวิธีคิดแก้ปัญหาที่ทุกคนควรมี ไม่ใช่แค่ทักษะของโปรแกรมเมอร์ ต่อมาหลายหลักสูตรสรุปให้สอนง่ายขึ้นเป็นสี่ทักษะ ได้แก่ การแยกปัญหาเป็นส่วนย่อย การหารูปแบบที่ซ้ำ การตัดรายละเอียดที่ไม่จำเป็น (abstraction) และการเขียนขั้นตอนแก้ปัญหา (อัลกอริทึม) การแบ่งสี่ทักษะนี้เป็นการสรุปของแหล่งข้อมูลรุ่นหลัง ไม่ได้อยู่ในบทความต้นฉบับของ Wing
ขั้นที่ผู้เริ่มต้นมักข้ามคือ ทดสอบกับค่าที่รู้คำตอบ ก่อนใช้โปรแกรมกับข้อมูลจริง ต้องลองกับตัวอย่างที่คำนวณด้วยมือได้ก่อนเสมอ เช่น ตัวอย่างที่เคยทำในวิชาอื่น
เตรียมสภาพแวดล้อม
เลือกรุ่น Python
ณ วันที่ 26 ก.ย. 2569 Python ที่ยังได้รับการดูแลคือรุ่น 3.10 ถึง 3.14 (รุ่น 3.10 จะหมดอายุราว ต.ค. 2026) และรุ่น 3.15 กำหนดออกวันที่ 1 ต.ค. 2026 วิชานี้ใช้ Python 3.12–3.14 เพราะไลบรารีที่ใช้ต้องการอย่างน้อย 3.11 และไลบรารี pymavlink ยังไม่มีรุ่นสำหรับ 3.15 ตรวจรุ่นในเครื่องด้วยคำสั่ง python --version
สร้างสภาพแวดล้อมเสมือน
สภาพแวดล้อมเสมือน (virtual environment) คือโฟลเดอร์ที่แยกไลบรารีของแต่ละโครงการออกจากกัน เหมือนกล่องเครื่องมือส่วนตัวของงานแต่ละงาน ถ้างานหนึ่งต้องใช้ไลบรารีรุ่นเก่า อีกงานต้องใช้รุ่นใหม่ ก็ไม่ชนกัน ดาวน์โหลดไฟล์ requirements.txt จาก หน้าดาวน์โหลดของวิชา แล้วรันในโฟลเดอร์งาน
python -m venv .venv
.venv\Scripts\Activate.ps1 # Windows PowerShell
# source .venv/bin/activate # Linux หรือ macOS
python -m pip install -r requirements.txt
หลังเปิดใช้งาน ชื่อ (.venv) จะขึ้นหน้าบรรทัดคำสั่ง ทุกครั้งที่เปิดงานใหม่ต้องเปิดใช้งาน venv ก่อน ตั้งแต่ Python 3.13 คำสั่ง venv สร้างไฟล์ .gitignore ในโฟลเดอร์ให้เอง จึงไม่เผลอส่ง venv ขึ้น Git (โมดูล 5)
เครื่องมือเขียนโค้ดที่แนะนำคือ VS Code สำหรับเขียนไฟล์ .py และ Jupyter Notebook สำหรับทดลองทีละขั้นพร้อมกราฟ (หน่วยความรู้ Jupyter ในคลังความรู้โดรน)
ตัวแปรและชนิดข้อมูล
ตัวแปร (variable) คือชื่อที่ผูกกับค่า เหมือนป้ายชื่อที่แปะบนกล่อง Python รู้ชนิดของค่าเอง ชนิดที่ใช้บ่อยที่สุดมีสี่ชนิด
aircraft = "RSU-QUAD-01" # str: ข้อความ
motor_count = 4 # int: จำนวนเต็ม
battery_voltage = 22.2 # float: จำนวนจริง (ทศนิยม)
armed = False # bool: True หรือ False
for value in (aircraft, motor_count, battery_voltage, armed):
print(type(value).__name__, value)
str RSU-QUAD-01
int 4
float 22.2
bool False
การตั้งชื่อตัวแปรให้บอกความหมายและหน่วย เช่น battery_voltage หรือ altitude_m ช่วยให้อ่านโค้ดได้ในอีกหลายเดือนต่อมา และลดความผิดพลาดเรื่องหน่วย
คำนวณและแปลงหน่วย
Python ใช้เครื่องหมาย + - * / ตามปกติ // คือหารปัดลง % คือเศษ และ ** คือยกกำลัง
ตัวอย่างที่ 1 แปลงหน่วยและหาพลังงานแบตเตอรี่
ใช้ค่าเดียวกับ UAT 312 โมดูล 1: แบตเตอรี่ 22.2 V 8.0 Ah ใช้ได้ 80% กำลังเฉลี่ย 350 W และความเร็ว 54 km/h
speed_kmh = 54
speed_ms = speed_kmh / 3.6
voltage_v = 22.2
capacity_ah = 8.0
energy_wh = voltage_v * capacity_ah
usable_wh = 0.8 * energy_wh
power_w = 350
endurance_min = usable_wh / power_w * 60
print(f"speed: {speed_ms:.1f} m/s")
print(f"energy: {energy_wh:.1f} Wh, usable: {usable_wh:.1f} Wh")
print(f"endurance: {endurance_min:.1f} min")
speed: 15.0 m/s
energy: 177.6 Wh, usable: 142.1 Wh
endurance: 24.4 min
ผลตรงกับที่คำนวณด้วยมือใน UAT 312 นี่คือการ ทดสอบกับค่าที่รู้คำตอบ ตามภาพที่ 1
f-string คือข้อความที่ขึ้นต้นด้วย f และแทรกค่าในวงเล็บปีกกา {...} ได้ ส่วน :.1f แปลว่าแสดงทศนิยมหนึ่งตำแหน่ง ช่วยให้ผลอ่านง่ายโดยไม่เปลี่ยนค่าที่เก็บจริง
ทศนิยมที่ไม่เท่ากันพอดี
คอมพิวเตอร์เก็บจำนวนแบบ float เป็นเลขฐานสอง ค่าอย่าง 0.1 จึงเก็บได้แค่ค่าที่ใกล้เคียงที่สุด เอกสาร Python ระบุว่านี่ ไม่ใช่ข้อผิดพลาดของ Python แต่เป็นธรรมชาติของเลขทศนิยมฐานสองในทุกภาษา
ตัวอย่างที่ 2 บวก 0.1 สิบครั้ง
import math
total = 0.0
for _ in range(10):
total += 0.1
print(total)
print(total == 1.0)
print(math.isclose(total, 1.0))
0.9999999999999999
False
True
การเปรียบเทียบเลขทศนิยมด้วย == จึงเสี่ยง ให้ใช้ math.isclose() ซึ่งยอมให้ต่างกันเล็กน้อยตามค่าความคลาดเคลื่อนที่กำหนด เรื่องนี้สำคัญมากกับข้อมูลเซนเซอร์ เพราะค่าจากเซนเซอร์ไม่เคยตรงพอดี
เขียนโค้ดให้คนอื่นอ่านได้
PEP 8 เป็นแนวทางการเขียนโค้ด Python ที่ใช้กันทั่วโลก ข้อที่ควรทำตั้งแต่วันแรกมีดังนี้
| เรื่อง | แนวทาง PEP 8 | ตัวอย่าง |
|---|---|---|
| ย่อหน้า | ช่องว่าง 4 ตัวต่อระดับ | print(x) |
| ความยาวบรรทัด | ไม่เกิน 79 ตัวอักษร (ทีมตกลงขยายถึง 99 ได้) | |
| ชื่อตัวแปรและฟังก์ชัน | ตัวพิมพ์เล็กคั่นด้วยขีดล่าง | battery_voltage, distance_m() |
| ชื่อคลาส | ขึ้นต้นแต่ละคำด้วยตัวพิมพ์ใหญ่ (CapWords) | SimDrone |
| ค่าคงที่ | ตัวพิมพ์ใหญ่คั่นด้วยขีดล่าง | EARTH_RADIUS_M |
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: เครื่องคิดเลขภารกิจ
- ติดตั้ง Python 3.12–3.14 สร้าง
.venvและติดตั้งไลบรารีจากrequirements.txtถ่ายภาพหน้าจอผลของpython --versionและpip list - เขียนไฟล์
mission_calc.pyที่เก็บค่าแรงดัน ความจุ สัดส่วนที่ใช้ได้ กำลังเฉลี่ย และระยะทางภารกิจเป็นตัวแปร แล้วพิมพ์เวลาบินได้และเวลาที่ภารกิจต้องใช้ - ทดสอบโปรแกรมกับตัวอย่างที่ 1 ให้ได้ 24.4 นาที ก่อนเปลี่ยนเป็นค่าของโดรนที่กลุ่มเลือก
- เปิด Jupyter Notebook ทำตัวอย่างที่ 2 แล้วอธิบายผลเป็นภาษาของตนเองในเซลล์ข้อความ
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ติดตั้งไลบรารีลงเครื่องโดยตรง ไม่ใช้ venv จนไลบรารีของงานต่าง ๆ ชนกัน
- ลืมเปิดใช้งาน venv แล้วงงว่าทำไม
import pandasไม่เจอ - เปรียบเทียบ float ด้วย
== - ตั้งชื่อตัวแปรไม่บอกหน่วย เช่น
vหรือx1จนสับสนว่าเป็น km/h หรือ m/s - ใช้ Python รุ่นที่ไลบรารียังไม่รองรับ เช่น รุ่นทดสอบก่อนออกจริง
สรุป
- การคิดเชิงคำนวณคือการแยกปัญหา ออกแบบขั้นตอน เขียนโค้ด และทดสอบกับค่าที่รู้คำตอบ
- ใช้ Python 3.12–3.14 และแยกไลบรารีของแต่ละงานด้วย venv
- ชนิดข้อมูลพื้นฐานคือ int, float, str และ bool ส่วน f-string ใช้จัดรูปแบบผล
- float เก็บทศนิยมได้ไม่พอดี ให้เปรียบเทียบด้วย
math.isclose() - ตั้งชื่อตาม PEP 8 และให้ชื่อบอกความหมายกับหน่วย
แบบฝึกตรวจความเข้าใจ
- ทำไมต้องทดสอบโปรแกรมกับค่าที่รู้คำตอบก่อนใช้กับข้อมูลจริง
- คำสั่งใดสร้างสภาพแวดล้อมเสมือนชื่อ
.venv type(4.0).__name__ได้ผลอะไร- 72 km/h เท่ากับกี่ m/s
- ตาม PEP 8 ควรตั้งชื่อค่าคงที่รัศมีโลกอย่างไร
เฉลย
- เพื่อยืนยันว่าโปรแกรมคำนวณถูกก่อน ถ้าผลไม่ตรงกับค่าที่รู้ ก็รู้ทันทีว่าต้องแก้ ไม่ต้องสงสัยข้อมูลจริง
python -m venv .venvfloat- m/s
- ตัวพิมพ์ใหญ่คั่นด้วยขีดล่าง เช่น
EARTH_RADIUS_M
สรุปสูตรสำคัญ
| แปลง km/h เป็น m/s | |
| พลังงานแบตเตอรี่ |
แหล่งอ้างอิงหลัก
- Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33–35. link
- Python Software Foundation. The Python tutorial (Python 3.14 documentation). link
- Python Software Foundation. Status of Python versions. Python Developer’s Guide. link
- Python Software Foundation. venv — Creation of virtual environments (Python 3.14 documentation). link
- Python Software Foundation. Floating-point arithmetic: Issues and limitations. In The Python tutorial (Python 3.14 documentation). link
- van Rossum, G., Warsaw, B., & Coghlan, A. (2001). PEP 8 – Style guide for Python code. link
- Downey, A. B. (2024). Think Python: How to think like a computer scientist (3rd ed.). O’Reilly. link
- Matthes, E. (2023). Python crash course (3rd ed.). No Starch Press.
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz