หน้าหลัก รายวิชาคอมพิวเตอร์ การเขียนโปรแกรมภาษา Python (ปวช. 2)

การเขียนโปรแกรมภาษา Python (Python Programming)

หลักสูตรประกาศนียบัตรวิชาชีพ (ปวช. 2) สาขาวิชาเทคโนโลยีสารสนเทศ / คอมพิวเตอร์ธุรกิจ ออกแบบเพื่อการจัดการเรียนรู้ฐานสมรรถนะวิชาชีพ พร้อมสื่อการสอน ใบงาน และเอกสารประเมินวิทยฐานะ ว.PA ครบวงจร

สมรรถนะวิชาชีพ หลักสูตร ปวช. 2
4 หน่วยการเรียนรู้หลัก
16 บทเรียนเจาะลึก
32+ แล็บฝึกปฏิบัติการ
สื่อ & แผน ว.PA พร้อมใช้งาน
4
หน่วยการเรียนรู้เข้มข้น
16
บทเรียนพร้อมคำอธิบาย
32+
แบบฝึกหัด & ข้อสอบปฏิบัติ
100%
สื่อพร้อมส่งงานวิชาการ / ว.PA
ศูนย์ดาวน์โหลดเอกสารวิชาการและสื่อนวัตกรรม
รวบรวมไฟล์ต้นฉบับ สื่อการสอน สไลด์ ซอร์สโค้ด และแผนการจัดการเรียนรู้มาตรฐาน สพฐ. สำหรับครูและนักเรียน
ตรวจสอบความถูกต้องทางวิชาการแล้ว
ประมวลรายวิชา (Syllabus)
เอกสารโครงสร้างรายวิชา คำอธิบายรายวิชา 40 ชม. จุดประสงค์ K-P-A ตารางจัดการเรียนรู้ 16 สัปดาห์ และเกณฑ์การวัดประเมินผล 100 คะแนน
ชุดใบงานฝึกปฏิบัติ 8 ชุด
ใบงานและแบบฝึกหัดการเขียนโปรแกรมเชิงปฏิบัติการ 8 ฉบับ พร้อมเกณฑ์การให้คะแนนรูบริกส์ (Rubric) และแนวทางการเขียนโค้ดเฉลยสำหรับครู
เปิดดูชุดใบงานและเฉลย
แพ็กเกจซอร์สโค้ด (.zip)
ไฟล์โค้ดภาษา Python (.py) ครบทั้ง 16 บทเรียน มีการจัดระเบียบโครงสร้าง คอมเมนต์อธิบายอย่างละเอียด นำไปใช้สอนและทดลองรันได้ทันที
ดาวน์โหลด ZIP (16 ไฟล์)
สไลด์บรรยายอิเล็กทรอนิกส์
ชุดสไลด์สรุปเนื้อหาสำคัญ ผังงาน (Flowchart) แผนภาพโครงสร้างข้อมูล และ Syntax Cheatsheet สะดวกต่อการนำไปจัดกิจกรรมในห้องเรียน
คู่มือโครงงานคอมพิวเตอร์
แนวทางการพัฒนาโครงงานคอมพิวเตอร์ขนาดเล็ก (Mini Project) รูปแบบรายงาน 5 บท และแบบฟอร์มการนำเสนอโครงงานเชิงประยุกต์
สารบัญบทเรียน
หน่วยที่ 1: การคิดเชิงคำนวณ & พื้นฐาน
บทที่ 1: การคิดเชิงคำนวณ บทที่ 2: สภาพแวดล้อมและคำสั่งแรก บทที่ 3: ตัวแปรและชนิดข้อมูล บทที่ 4: การรับข้อมูลและ f-String
หน่วยที่ 2: โครงสร้างควบคุม
บทที่ 5: ตัวดำเนินการและนิพจน์ บทที่ 6: เงื่อนไขและการตัดสินใจ บทที่ 7: โครงสร้างการวนซ้ำ บทที่ 8: การจัดการข้อผิดพลาด
หน่วยที่ 3: โครงสร้างข้อมูล & โมดูล
บทที่ 9: ข้อมูลแบบ List & Tuple บทที่ 10: Dictionary & Set บทที่ 11: การเขียนฟังก์ชัน บทที่ 12: โมดูลและไลบรารี
หน่วยที่ 4: ไฟล์ OOP & โครงงาน
บทที่ 13: การจัดการไฟล์ข้อมูล บทที่ 14: OOP Classes & Objects บทที่ 15: การสืบทอดและการห่อหุ้ม บทที่ 16: โครงงานประยุกต์ Capstone
หน่วยที่ 1: พื้นฐานการคิดเชิงคำนวณและการเขียนโปรแกรม

บทที่ 1: การคิดเชิงคำนวณกับการเขียนโปรแกรม (Computational Thinking)

Computational Thinking & Algorithm Design
2 คาบ (100 นาที)
K: เข้าใจ 4 เสาหลักของการคิดเชิงคำนวณในการแก้ปัญหา P: สามารถแตกปัญหาย่อยและออกแบบอัลกอริทึมได้ถูกต้อง A: มีความรอบคอบและคิดวิเคราะห์อย่างเป็นระบบ

การคิดเชิงคำนวณ (Computational Thinking) เป็นทักษะการแก้ปัญหาอย่างมีระเบียบแบบแผน เพื่อให้คอมพิวเตอร์หรือมนุษย์สามารถปฏิบัติตามได้อย่างถูกต้อง ประกอบด้วย 4 เสาหลักสำคัญ:

  • 1. การแยกย่อยปัญหา (Decomposition): การแบ่งปัญหาใหญ่ที่ซับซ้อนออกเป็นปัญหาย่อยๆ ที่จัดการได้ง่ายขึ้น
  • 2. การหารูปแบบ (Pattern Recognition): การสังเกตความคล้ายคลึงหรือแนวโน้มของข้อมูลเพื่อลดความซ้ำซ้อน
  • 3. การคิดเชิงนามธรรม (Abstraction): การคัดเลือกเฉพาะสาระสำคัญที่จำเป็นต่อการแก้ปัญหา และตัดรายละเอียดที่ไม่เกี่ยวข้องออก
  • 4. การออกแบบอัลกอริทึม (Algorithm Design): การกำหนดลำดับขั้นตอนวิธี 1, 2, 3... เพื่อนำไปสู่วิธีแก้ปัญหาที่นำไปเขียนโค้ดได้จริง
Python 3.10+ Script
# 1. Decomposition: กำหนดคะแนนเก็บแต่ละรายวิชา
scores = [85, 92, 78, 64, 88]

# 2. Pattern & Abstraction: คำนวณเฉพาะผลรวมและค่าเฉลี่ย
total_score = sum(scores)
subject_count = len(scores)
average_score = total_score / subject_count

# 3. Algorithm: ตรวจสอบระดับผลการเรียน
if average_score >= 80:
    grade_desc = "ดีเยี่ยม (ระดับ 4)"
elif average_score >= 70:
    grade_desc = "ดี (ระดับ 3)"
else:
    grade_desc = "ผ่านเกณฑ์มาตรฐาน"

print(f"ผลคะแนนรวม: {total_score} คะแนน")
print(f"คะแนนเฉลี่ย: {average_score:.2f} คะแนน")
print(f"ผลการประเมินคุณภาพ: {grade_desc}")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ผลคะแนนรวม: 407 คะแนน
คะแนนเฉลี่ย: 81.40 คะแนน
ผลการประเมินคุณภาพ: ดีเยี่ยม (ระดับ 4)
ข้อสังเกตสำหรับครูผู้สอน: ก่อนให้นักเรียนลงมือพิมพ์โค้ด ควรให้นักเรียนฝึกเขียนผังงาน (Flowchart) หรือรหัสลำลอง (Pseudocode) ลงในสมุด เพื่อสร้างกระบวนการคิดเชิงตรรกะก่อนเข้าสู่ไวยากรณ์ภาษา
ใบกิจกรรมฝึกปฏิบัติการ 1.1
ให้นักเรียนวิเคราะห์ปัญหาการคำนวณ อัตราการสิ้นเปลืองน้ำมันเชื้อเพลิง (กม./ลิตร) โดยรับระยะทางรวม (กม.) และปริมาณน้ำมันที่ใช้ (ลิตร) จากนั้นประเมินว่ารถยนต์คันนี้ประหยัดน้ำมันหรือไม่ (เกณฑ์: เกิน 15 กม./ลิตร ถือว่าประหยัด)
Solution Guide
distance_km = 450.0   # ระยะทางที่วิ่งได้
fuel_liters = 28.0    # ปริมาณน้ำมันที่ใช้

consumption_rate = distance_km / fuel_liters
print(f"อัตราสิ้นเปลือง: {consumption_rate:.2f} กม./ลิตร")

if consumption_rate >= 15.0:
    print("ผลการประเมิน: รถยนต์ประหยัดพลังงานดีเยี่ยม")
else:
    print("ผลการประเมิน: รถยนต์มีอัตราสิ้นเปลืองปกติหรือสูง")
หน่วยที่ 1: พื้นฐานการคิดเชิงคำนวณและการเขียนโปรแกรม

บทที่ 2: สภาพแวดล้อมและการรันโปรแกรมแรก (Python Environment & First Program)

Development Environment Setup & print() Function
2 คาบ (100 นาที)
K: เข้าใจสถาปัตยกรรมตัวแปลภาษา Python (Interpreter) P: ติดตั้งเครื่องมือและสั่งพิมพ์ผลลัพธ์ด้วย print() ได้ A: ตระหนักถึงความสำคัญของการจัดรูปแบบโค้ดที่ถูกต้อง

ภาษา Python เป็นภาษาประเภท Interpreted Language ซึ่งประมวลผลคำสั่งทีละบรรทัดผ่านตัวแปลภาษา (Python Interpreter) ทำให้สะดวกในการทดสอบและเรียนรู้ เครื่องมือแนะนำในห้องเรียน ได้แก่ VS Code หรือ Thonny IDE

คำสั่งพื้นฐานที่สุดคือคำสั่ง print() ซึ่งทำหน้าที่ส่งออกข้อมูลออกทางหน้าจอ โดยมีพารามิเตอร์เสริมสำคัญ:

  • sep="..." กำหนดตัวคั่นระหว่างข้อมูล (ค่าเริ่มต้นคือเว้นวรรค)
  • end="..." กำหนดตัวปิดท้ายบรรทัด (ค่าเริ่มต้นคือขึ้นบรรทัดใหม่ \n)
Python 3.10+ Script
# ตรวจสอบสภาพแวดล้อมและทดสอบคำสั่ง print()
import sys
import platform

print("=== ยินดีต้อนรับสู่ห้องเรียนคอมพิวเตอร์ ครูบาส ===")
print("ระบบปฏิบัติการ:", platform.system(), platform.release())
print("เวอร์ชันภาษา Python:", platform.python_version())

# การใช้ sep และ end ในการจัดรูปแบบการแสดงผล
print("Python", "Programming", "Class", sep=" | ")
print("กำลังโหลดข้อมูล", end="... ")
print("เสร็จสมบูรณ์ 100%")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
=== ยินดีต้อนรับสู่ห้องเรียนคอมพิวเตอร์ ครูบาส ===
ระบบปฏิบัติการ: Windows 10
เวอร์ชันภาษา Python: 3.10.11
Python | Programming | Class
กำลังโหลดข้อมูล... เสร็จสมบูรณ์ 100%
Pro-Tip: ภาษา Python ให้ความสำคัญกับตัวพิมพ์เล็ก-ใหญ่ (Case-sensitive) ดังนั้นคำสั่ง Print() หรือ PRINT() จะส่งผลให้เกิดข้อผิดพลาด NameError ทันที
ใบกิจกรรมฝึกปฏิบัติการ 1.2
ให้นักเรียนเขียนโปรแกรมพิมพ์ป้ายนิเทศแนะนำห้องปฏิบัติการคอมพิวเตอร์ โดยใช้ sep และ end ให้ข้อความแสดงเป็นกรอบสวยงาม 3 บรรทัด
Solution Guide
border = "=" * 40
print(border)
print("ห้องปฏิบัติการคอมพิวเตอร์", "กลุ่มสาระวิทย์-เทคโน", sep=" :: ")
print("พร้อมสำหรับการเรียนรู้ศตวรรษที่ 21", end="\n")
print(border)
หน่วยที่ 1: พื้นฐานการคิดเชิงคำนวณและการเขียนโปรแกรม

บทที่ 3: ตัวแปร ชนิดข้อมูล และการแปลงประเภท (Variables & Type Casting)

Data Types & Type Casting Mechanisms
2 คาบ (100 นาที)
K: จำแนกชนิดข้อมูลพื้นฐาน int, float, str, bool ได้ P: ประกาศตัวแปรและแปลงชนิดข้อมูล (Type Casting) ได้ถูกต้อง A: ปฏิบัติตามมาตรฐานการตั้งชื่อตัวแปรแบบสากล

ตัวแปร (Variable) ทำหน้าที่เป็นชื่ออ้างอิงตำแหน่งในหน่วยความจำเพื่อเก็บค่าข้อมูล ใน Python ไม่จำเป็นต้องประกาศชนิดข้อมูลล่วงหน้า (Dynamic Typing) ชนิดข้อมูลหลักที่ใช้บ่อยได้แก่:

  • int (Integer): จำนวนเต็มบวก ลบ ศูนย์ เช่น 42, -7
  • float (Floating point): จำนวนจริงมีทศนิยม เช่น 3.14159, 0.85
  • str (String): ข้อความหรืออักขระ อยู่ในเครื่องหมายคำพูดเดี่ยวหรือคู่ เช่น "ครูบาส"
  • bool (Boolean): ค่าความจริงทางตรรกศาสตร์ มีเพียง True หรือ False

การแปลงชนิดข้อมูล (Type Casting) ใช้ฟังก์ชัน int(), float(), str(), bool()

Python 3.10+ Script
# ประกาศตัวแปรข้อมูลนักเรียน
student_name = "สมชาย มุ่งมั่น"   # str
student_id = 6701048             # int
gpa = 3.85                       # float
is_passed = True                 # bool

# ตรวจสอบชนิดข้อมูลด้วยฟังก์ชัน type()
print("ชื่อ:", student_name, "| ชนิด:", type(student_name).__name__)
print("เกรดเฉลี่ย:", gpa, "| ชนิด:", type(gpa).__name__)

# การแปลงชนิดข้อมูล (Type Casting)
str_score = "85"
int_score = int(str_score)       # แปลง str เป็น int
final_score = int_score + 5      # นำมาคำนวณทางคณิตศาสตร์ได้
print(f"คะแนนหลังปรับเพิ่ม 5 คะแนน: {final_score}")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ชื่อ: สมชาย มุ่งมั่น | ชนิด: str
เกรดเฉลี่ย: 3.85 | ชนิด: float
คะแนนหลังปรับเพิ่ม 5 คะแนน: 90
กฎการตั้งชื่อตัวแปร: ควรใช้ตัวอักษรภาษาอังกฤษ ตัวเลข และเครื่องหมาย _ (Underscore) ห้ามขึ้นต้นด้วยตัวเลข และไม่ควรตั้งชื่อซ้ำกับคำสงวน (Reserved Keywords) เช่น for, if, class, def, return
ใบกิจกรรมฝึกปฏิบัติการ 1.3
ให้นักเรียนเขียนโปรแกรมคำนวณปีเกิด พ.ศ. โดยรับปีปัจจุบันเป็น พ.ศ. 2567 และอายุเป็นข้อความ '16' จากนั้นแปลงชนิดข้อมูลเพื่อหาปีเกิดและแสดงผลอย่างชัดเจน
Solution Guide
current_year = 2567
age_str = "16"

age = int(age_str)
birth_year = current_year - age

print(f"ปีปัจจุบัน พ.ศ. {current_year}")
print(f"อายุ {age} ปี")
print(f"ปีเกิดของนักเรียนคือ พ.ศ. {birth_year}")
หน่วยที่ 1: พื้นฐานการคิดเชิงคำนวณและการเขียนโปรแกรม

บทที่ 4: การรับข้อมูล (Input) และการจัดรูปแบบด้วย f-String (User Input & Formatting)

User Input & String Interpolation with f-Strings
2 คาบ (100 นาที)
K: เข้าใจพฤติกรรมการคืนค่าของฟังก์ชัน input() P: ใช้ f-String จัดตำแหน่งและทศนิยมในการแสดงผลได้สวยงาม A: ออกแบบส่วนต่อประสานกับผู้ใช้ (User Prompt) ที่เข้าใจง่าย

ฟังก์ชัน input() จะรอรับข้อมูลจากผู้ใช้ทางแป้นพิมพ์ และจะ ส่งคืนค่าเป็นชนิดข้อความ (str) เสมอ ดังนั้นหากต้องการนำไปคำนวณตัวเลข จะต้องแปลงประเภทข้อมูลทันที เช่น float(input()) หรือ int(input())

การแสดงผลข้อความระดับมืออาชีพในภาษา Python แนะนำให้ใช้ f-String (Formatted String Literals) ซึ่งเริ่มต้นด้วย f"..." และแทรกตัวแปรใน {variable} สามารถจัดรูปแบบตัวเลขได้ เช่น:

  • {num:.2f} แสดงทศนิยม 2 ตำแหน่ง
  • {num:,.2f} ใส่เครื่องหมายจุลภาคคั่นหลักพัน
  • {text:>15} หรือ {text:<15} จัดตำแหน่งชิดขวาหรือชิดซ้าย
Python 3.10+ Script
# ระบบคำนวณดัชนีมวลกาย (BMI Calculator) และออกใบสรุปผล
weight_kg = 68.5   # จำลองค่า input จากผู้ใช้
height_cm = 175.0  # จำลองค่า input จากผู้ใช้

height_m = height_cm / 100
bmi = weight_kg / (height_m ** 2)

# จัดรูปแบบตารางสรุปผลด้วย f-String
print("=" * 45)
print(f"{'รายการ':<25} | {'ค่าที่วัดได้':>15}")
print("-" * 45)
print(f"{'น้ำหนักตัว (Weight)':<25} | {weight_kg:>11.1f} กก.")
print(f"{'ส่วนสูง (Height)':<25} | {height_cm:>11.1f} ซม.")
print(f"{'ดัชนีมวลกาย (BMI)':<25} | {bmi:>11.2f}")
print("=" * 45)
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
=============================================
รายการ                     |     ค่าที่วัดได้
---------------------------------------------
น้ำหนักตัว (Weight)        |        68.5 กก.
ส่วนสูง (Height)           |       175.0 ซม.
ดัชนีมวลกาย (BMI)          |           22.37
=============================================
ข้อควรระวัง: หากผู้ใช้ป้อนตัวอักษรแทนตัวเลขใน float(input()) จะเกิดข้อผิดพลาด ValueError ทันที ซึ่งเราจะได้เรียนรู้วิธีการดักจับข้อผิดพลาดในหน่วยที่ 2 บทที่ 8
ใบกิจกรรมฝึกปฏิบัติการ 1.4
ให้นักเรียนเขียนโปรแกรมคำนวณใบเสร็จสหกรณ์โรงเรียน โดยรับราคาสินค้า 350 บาท จำนวน 3 ชิ้น คำนวณยอดรวม และภาษีมูลค่าเพิ่ม 7% พร้อมแสดงผลเป็นเงินบาทมีเครื่องหมายคั่นหลักพัน
Solution Guide
unit_price = 350.0
quantity = 3

subtotal = unit_price * quantity
vat = subtotal * 0.07
net_total = subtotal + vat

print(f"ยอดรวมก่อนภาษี:  {subtotal:>10,.2f} บาท")
print(f"ภาษีมูลค่าเพิ่ม (7%): {vat:>10,.2f} บาท")
print(f"ยอดสุทธิที่ต้องชำระ: {net_total:>10,.2f} บาท")
หน่วยที่ 2: โครงสร้างควบคุมและการตัดสินใจ

บทที่ 5: ตัวดำเนินการและลำดับความสำคัญของนิพจน์ (Operators & Precedence)

Arithmetic, Comparison, Logical Operators & Precedence
2 คาบ (100 นาที)
K: เข้าใจตัวดำเนินการทางคณิตศาสตร์ ตรรกศาสตร์ และการเปรียบเทียบ P: คำนวณนิพจน์ซับซ้อนตามลำดับความสำคัญ (PEMDAS) ได้ถูกต้อง A: มีความรอบคอบในการจัดกลุ่มนิพจน์ด้วยวงเล็บ

ตัวดำเนินการใน Python แบ่งออกเป็นหลายกลุ่มหลัก ได้แก่:

  • ตัวดำเนินการคณิตศาสตร์: บวก +, ลบ -, คูณ *, หารจริง /, หารปัดเศษลง //, หารเอาเศษ %, ยกกำลัง **
  • ตัวดำเนินการเปรียบเทียบ: ==, !=, >, <, >=, <= (คืนค่าเป็น True หรือ False)
  • ตัวดำเนินการตรรกศาสตร์: and (จริงทั้งคู่), or (จริงอย่างน้อยหนึ่ง), not (กลับค่าความจริง)

ลำดับความสำคัญ: วงเล็บ () > ยกกำลัง ** > คูณ/หาร *, /, //, % > บวก/ลบ +, - > เปรียบเทียบ > ตรรกศาสตร์

Python 3.10+ Script
# ตัวอย่างการคำนวณและลำดับความสำคัญของตัวดำเนินการ
x = 10
y = 3

print(f"ผลหารจริง {x} / {y} = {x / y:.3f}")
print(f"ผลหารปัดเศษ {x} // {y} = {x // y}")
print(f"เศษจากการหาร {x} % {y} = {x % y}")
print(f"ยกกำลัง {x} ** {y} = {x ** y}")

# การใช้ตัวดำเนินการตรรกศาสตร์
score = 75
attendance = 85
is_eligible = (score >= 60) and (attendance >= 80)
print(f"มีสิทธิ์สอบหรือไม่: {is_eligible}")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ผลหารจริง 10 / 3 = 3.333
ผลหารปัดเศษ 10 // 3 = 3
เศษจากการหาร 10 % 3 = 1
ยกกำลัง 10 ** 3 = 1000
มีสิทธิ์สอบหรือไม่: True
Pro-Tip: เมื่อต้องเขียนนิพจน์ที่มีเงื่อนไขซับซ้อน แนะนำให้ใส่วงเล็บ () เสมอ แม้จะไม่จำเป็นตามหลักคณิตศาสตร์ เพื่อให้อ่านโค้ดได้ง่ายและลดข้อผิดพลาดจากลำดับที่ไม่พึงประสงค์
ใบกิจกรรมฝึกปฏิบัติการ 2.1
ให้นักเรียนเขียนโปรแกรมตรวจสอบปีอธิกสุรทิน (Leap Year) ค.ศ. ที่กำหนด โดยมีเงื่อนไข: เป็นปีที่หารด้วย 4 ลงตัว และต้องหารด้วย 100 ไม่ลงตัว เว้นแต่จะหารด้วย 400 ลงตัว
Solution Guide
year = 2024
is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

if is_leap:
    print(f"ปี ค.ศ. {year} เป็นปีอธิกสุรทิน (มี 366 วัน)")
else:
    print(f"ปี ค.ศ. {year} เป็นปีปกติสุรทิน (มี 365 วัน)")
หน่วยที่ 2: โครงสร้างควบคุมและการตัดสินใจ

บทที่ 6: การตัดสินใจแบบมีเงื่อนไข (if-elif-else & match-case)

Conditional Flow Control & Pattern Matching
3 คาบ (150 นาที)
K: เข้าใจตรรกะการแยกสาขาการทำงาน (Branching) P: ประยุกต์ใช้ if-elif-else และ match-case ได้เหมาะสม A: วางโครงสร้างเงื่อนไขอย่างรัดกุมครอบคลุมทุกกรณี

โครงสร้างแบบเลือกทำ (Selection Control Structure) ช่วยให้โปรแกรมตัดสินใจเลือกเส้นทางการทำงานตามเงื่อนไขที่กำหนด:

  • if: ตรวจสอบเงื่อนไขแรก หากเป็นจริงจะทำงานในบล็อก
  • elif (else if): ตรวจสอบเงื่อนไขถัดไปเมื่อเงื่อนไขก่อนหน้าเป็นเท็จ
  • else: ทำงานเมื่อเงื่อนไขทั้งหมดด้านบนเป็นเท็จ
  • match ... case: ไวยากรณ์ทันสมัยใน Python 3.10+ (Structural Pattern Matching) เหมาะสำหรับการเปรียบเทียบค่าแบบหลายทางเลือกที่อ่านง่ายกว่า elif ยาวๆ
Python 3.10+ Script
# ระบบตัดเกรดและตรวจสอบสิทธิ์ด้วย if-elif-else และ match-case
score = 84

if score >= 80:
    grade = "4"
elif score >= 75:
    grade = "3.5"
elif score >= 70:
    grade = "3"
elif score >= 65:
    grade = "2.5"
elif score >= 60:
    grade = "2"
else:
    grade = "ต่ำกว่าเกณฑ์"

user_role = "teacher"
match user_role:
    case "admin":
        permission = "สิทธิ์ผู้ดูแลระบบสูงสุด (Full Control)"
    case "teacher":
        permission = "สิทธิ์ครูผู้สอน: บันทึกคะแนนและประเมินผล"
    case "student":
        permission = "สิทธิ์นักเรียน: ศึกษาบทเรียนและส่งงาน"
    case _:
        permission = "สิทธิ์ผู้เยี่ยมชมทั่วไป"

print(f"ผลคะแนน: {score} -> ได้เกรด: {grade}")
print(f"บทบาท: {user_role} -> {permission}")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ผลคะแนน: 84 -> ได้เกรด: 4
บทบาท: teacher -> สิทธิ์ครูผู้สอน: บันทึกคะแนนและประเมินผล
จุดสำคัญเรื่อง Indentation: Python ใช้การย่อหน้า (Indentation 4 เคาะ) เพื่อแบ่งขอบเขตบล็อกคำสั่ง ห้ามผสมแท็บกับสเปซ เพราะจะเกิดข้อผิดพลาด IndentationError ทันที
ใบกิจกรรมฝึกปฏิบัติการ 2.2
ให้นักเรียนเขียนโปรแกรมคำนวณส่วนลดตามยอดสั่งซื้อ: ต่ำกว่า 500 ไม่ลด, 500-999 ลด 5%, 1,000-2,499 ลด 10%, 2,500 ขึ้นไป ลด 15% พร้อมแสดงยอดชำระสุทธิ
Solution Guide
purchase_amount = 1850.0

if purchase_amount >= 2500:
    discount_pct = 15
elif purchase_amount >= 1000:
    discount_pct = 10
elif purchase_amount >= 500:
    discount_pct = 5
else:
    discount_pct = 0

discount_val = purchase_amount * (discount_pct / 100)
net_price = purchase_amount - discount_val

print(f"ยอดซื้อ: {purchase_amount:,.2f} บาท")
print(f"ส่วนลด ({discount_pct}%): -{discount_val:,.2f} บาท")
print(f"ยอดสุทธิ: {net_price:,.2f} บาท")
หน่วยที่ 2: โครงสร้างควบคุมและการตัดสินใจ

บทที่ 7: โครงสร้างการวนซ้ำและการควบคุมลูป (Loops: for, while, break, continue)

Definite & Indefinite Iterations with Loop Controls
3 คาบ (150 นาที)
K: แยกแยะความแตกต่างระหว่าง for loop และ while loop ได้ P: ใช้คำสั่ง break, continue และ range() ในการวนลูปได้แม่นยำ A: ระมัดระวังเงื่อนไขหยุดเพื่อป้องกันลูปไม่รู้จบ (Infinite Loop)

โครงสร้างแบบวนซ้ำ (Repetition / Iteration) ช่วยให้คอมพิวเตอร์ประมวลผลงานซ้ำๆ ได้อย่างรวดเร็ว:

  • for loop: เหมาะสำหรับการวนซ้ำที่ทราบจำนวนรอบแน่นอน หรือวนผ่านสมาชิกของลำดับ (Sequence) ร่วมกับฟังก์ชัน range(start, stop, step)
  • while loop: เหมาะสำหรับการวนซ้ำที่ขึ้นอยู่กับเงื่อนไข จะทำงานวนซ้ำตราบเท่าที่เงื่อนไขยังเป็น True
  • break: สั่งหยุดและออกจากลูปทันที
  • continue: ข้ามรอบปัจจุบันและข้ามไปยังการวนรอบถัดไป
Python 3.10+ Script
# 1. ตารางสูตรคูณแม่ 9 ด้วย for loop และ range()
print("=== ตารางสูตรคูณแม่ 9 ===")
for multiplier in range(1, 13):
    print(f"9 x {multiplier:2d} = {9 * multiplier:2d}")

# 2. การค้นหาจำนวนเฉพาะ (Prime Numbers) ในช่วง 2 ถึง 20
primes = []
for num in range(2, 21):
    is_prime = True
    for divisor in range(2, int(num ** 0.5) + 1):
        if num % divisor == 0:
            is_prime = False
            break  # หากมีตัวหารลงตัว ออกจากลูปย่อยทันที
    if is_prime:
        primes.append(num)

print(f"จำนวนเฉพาะ 2-20 ได้แก่: {primes}")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
=== ตารางสูตรคูณแม่ 9 ===
9 x  1 =  9
9 x  2 = 18
...
9 x 12 = 108
จำนวนเฉพาะ 2-20 ได้แก่: [2, 3, 5, 7, 11, 13, 17, 19]
เทคนิคการลดภาระคอมพิวเตอร์: ในการตรวจสอบจำนวนเฉพาะ เราตรวจสอบตัวหารเพียงแค่ถึงรากที่สอง int(num ** 0.5) + 1 ก็เพียงพอ ไม่จำเป็นต้องตรวจถึงตัวเลขนั้นทั้งหมด
ใบกิจกรรมฝึกปฏิบัติการ 2.3
ให้นักเรียนเขียนโปรแกรมพิมพ์รูปพีระมิดดาว โดยมีจำนวนชั้นเท่ากับ 5 แถว เพื่อฝึกทักษะการใช้ลูปซ้อนลูป (Nested Loops)
Solution Guide
rows = 5
for i in range(1, rows + 1):
    spaces = " " * (rows - i)
    stars = "*" * (2 * i - 1)
    print(spaces + stars)
หน่วยที่ 2: โครงสร้างควบคุมและการตัดสินใจ

บทที่ 8: การจัดการข้อผิดพลาดและข้อยกเว้น (Exception Handling: try-except)

Robust Error Handling with try, except, else & finally
2 คาบ (100 นาที)
K: เข้าใจชนิดของ Error ที่พบบ่อย เช่น ValueError, ZeroDivisionError P: ใช้บล็อก try-except-else-finally ดักจับข้อผิดพลาดไม่ให้โปรแกรมหยุดชะงัก A: พัฒนาโปรแกรมที่มีความทนทานต่อข้อผิดพลาด (Robust Software)

ขณะที่โปรแกรมทำงาน อาจมีข้อผิดพลาดระหว่างรันไทม์ (Runtime Errors) ส่งผลให้โปรแกรมแครช (Crash) การใช้โครงสร้าง Exception Handling ช่วยให้โปรแกรมสามารถรับมือและทำงานต่อไปได้:

  • try: ใส่โค้ดที่มีความเสี่ยงว่าจะเกิดข้อผิดพลาด
  • except ErrorType: กำหนดการทำงานเมื่อเกิดข้อผิดพลาดตามชนิดที่ระบุ
  • else: ทำงานเมื่อ ไม่เกิด ข้อผิดพลาดใดๆ ในบล็อก try
  • finally: ทำงาน เสมอ ไม่ว่าจะเกิดข้อผิดพลาดหรือไม่ เหมาะสำหรับปิดไฟล์หรือตัดการเชื่อมต่อ
Python 3.10+ Script
# ระบบหารตัวเลขและรับคะแนนอย่างปลอดภัย
def safe_calculator(dividend_str, divisor_str):
    try:
        a = float(dividend_str)
        b = float(divisor_str)
        result = a / b
    except ValueError:
        return "ข้อผิดพลาด: ข้อมูลที่ป้อนต้องเป็นตัวเลขเท่านั้น!"
    except ZeroDivisionError:
        return "ข้อผิดพลาด: ตัวหารต้องไม่เป็นศูนย์ (ZeroDivisionError)!"
    except Exception as e:
        return f"ข้อผิดพลาดที่ไม่คาดหมาย: {e}"
    else:
        return f"ผลลัพธ์: {a} / {b} = {result:.2f}"
    finally:
        pass

print(safe_calculator("100", "4"))
print(safe_calculator("100", "0"))
print(safe_calculator("หนึ่งร้อย", "4"))
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ผลลัพธ์: 100.0 / 4.0 = 25.00
ข้อผิดพลาด: ตัวหารต้องไม่เป็นศูนย์ (ZeroDivisionError)!
ข้อผิดพลาด: ข้อมูลที่ป้อนต้องเป็นตัวเลขเท่านั้น!
ข้อควรระวัง: หลีกเลี่ยงการใช้ except: เปล่าๆ โดยไม่ระบุประเภทของ Exception เพราะจะทำให้ดักจับข้อผิดพลาดของระบบทั้งหมดรวมถึงการกด Ctrl+C เพื่อหยุดโปรแกรม
ใบกิจกรรมฝึกปฏิบัติการ 2.4
ให้นักเรียนเขียนโปรแกรมรับค่าน้ำหนักนักเรียน หากผู้ใช้ป้อนค่าน้อยกว่าหรือเท่ากับศูนย์ ให้ทำการ raise ข้อผิดพลาด ValueError พร้อมข้อความเตือน
Solution Guide
try:
    weight = float(input("ป้อนน้ำหนัก (กก.): "))
    if weight <= 0:
        raise ValueError("น้ำหนักต้องมากกว่า 0 กิโลกรัม")
    print(f"บันทึกค่าน้ำหนัก {weight:.1f} กก. เรียบร้อย")
except ValueError as e:
    print(f"แจ้งเตือน: {e}")
หน่วยที่ 3: โครงสร้างข้อมูลและการเขียนโปรแกรมแบบโมดูล

บทที่ 9: โครงสร้างข้อมูลแบบ List และ Tuple (Sequences & Collections)

Mutable Lists, List Comprehension & Immutable Tuples
2 คาบ (100 นาที)
K: เปรียบเทียบความแตกต่างระหว่าง List (Mutable) กับ Tuple (Immutable) P: ใช้เมธอดจัดการ List และเขียน List Comprehension ได้คล่องแคล่ว A: เลือกโครงสร้างข้อมูลที่เหมาะสมกับลักษณะของงาน

โครงสร้างข้อมูลแบบลำดับ (Sequence Data Types) ใช้จัดเก็บชุดข้อมูลหลายค่าไว้ในตัวแปรเดียว:

  • List [...]: เปลี่ยนแปลงค่าได้ (Mutable) สามารถเพิ่ม ลบ แก้ไข และเรียงลำดับข้อมูลได้ เมธอดสำคัญได้แก่ append(), insert(), pop(), remove(), sort()
  • List Comprehension: รูปแบบการสร้างลิสต์ใหม่จากลิสต์เดิมที่กระชับและมีประสิทธิภาพสูง เช่น [x for x in data if condition]
  • Tuple (...): ไม่สามารถเปลี่ยนแปลงค่าได้ (Immutable) มีความเร็วในการประมวลผลสูง ปลอดภัยจากการแก้ไขโดยไม่ตั้งใจ เหมาะสำหรับพิกัดหรือค่าคงที่
Python 3.10+ Script
# ตัวอย่างการจัดการรายชื่อวิชาและคะแนนสอบ
subjects = ["วิทยาการคำนวณ", "คณิตศาสตร์", "ฟิสิกส์"]
subjects.append("เคมี")          # เพิ่มข้อมูลท้ายลิสต์
subjects.insert(1, "ภาษาไทย")    # แทรกข้อมูลที่ดัชนี 1
print("รายวิชาทั้งหมด:", subjects)

# การใช้ List Comprehension กรองคะแนนที่ผ่านเกณฑ์ (>= 70)
scores = [65, 82, 90, 54, 73, 88]
passed_scores = [s for s in scores if s >= 70]
print("คะแนนที่ผ่านเกณฑ์:", passed_scores)

# การใช้งาน Tuple สำหรับพิกัดภูมิศาสตร์ที่ไม่ต้องการให้เปลี่ยนค่า
school_location = (13.7563, 100.5018, "อาคารวิทยาศาสตร์")
lat, lon, building = school_location
print(f"พิกัดโรงเรียน: {lat}, {lon} ({building})")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
รายวิชาทั้งหมด: ['วิทยาการคำนวณ', 'ภาษาไทย', 'คณิตศาสตร์', 'ฟิสิกส์', 'เคมี']
คะแนนที่ผ่านเกณฑ์: [82, 90, 73, 88]
พิกัดโรงเรียน: 13.7563, 100.5018 (อาคารวิทยาศาสตร์)
เทคนิค List Slicing: เราสามารถดึงข้อมูลบางช่วงของลิสต์ได้ด้วย list[start:stop:step] เช่น scores[:3] ดึง 3 ตัวแรก หรือ scores[::-1] เพื่อกลับทิศทางลิสต์
ใบกิจกรรมฝึกปฏิบัติการ 3.1
ให้นักเรียนเขียนโปรแกรมตัดเกรด โดยมีลิสต์คะแนนสอบ 5 คน แล้วใช้ List Comprehension แปลงคะแนนทั้งหมดเป็นเกรด 'ผ่าน' (>=50) หรือ 'ไม่ผ่าน'
Solution Guide
raw_scores = [45, 78, 92, 38, 60]
results = ["ผ่าน" if s >= 50 else "ไม่ผ่าน" for s in raw_scores]

for score, result in zip(raw_scores, results):
    print(f"คะแนน {score:2d} -> {result}")
หน่วยที่ 3: โครงสร้างข้อมูลและการเขียนโปรแกรมแบบโมดูล

บทที่ 10: พจนานุกรมและเซต (Dictionary & Set)

Key-Value Pairs in Dictionary & Unique Elements in Set
2 คาบ (100 นาที)
K: เข้าใจแนวคิด Key-Value ใน Dictionary และความไม่ซ้ำของ Set P: ดึงและปรับปรุงข้อมูลใน Nested Dictionary และทำ Set Operations ได้ A: จัดระเบียบข้อมูลที่มีความซับซ้อนให้ค้นหาได้อย่างมีประสิทธิภาพ

โครงสร้างข้อมูลแบบแมปปิ้งและเซต:

  • Dictionary {"key": value}: เก็บข้อมูลเป็นคู่คีย์-ค่า (Key-Value Pairs) ค้นหาข้อมูลได้เร็วมากด้วย Key เมธอดสำคัญได้แก่ .get(), .keys(), .values(), .items()
  • Set {item1, item2}: รวบรวมข้อมูลที่ไม่เรียงลำดับและ ไม่มีสมาชิกซ้ำกันเลย รองรับการดำเนินการทางคณิตศาสตร์:
    • Union (|): รวมสมาชิกทั้งหมด
    • Intersection (&): หาเฉพาะสมาชิกที่มีร่วมกัน
    • Difference (-): สมาชิกที่มีในเซตแรกแต่ไม่มีในเซตหลัง
Python 3.10+ Script
# 1. ข้อมูลนักเรียนในรูปแบบ Dictionary
student_record = {
    "student_id": "6701001",
    "name": "กานดา พรประสิทธิ์",
    "scores": {"homework": 28, "midterm": 32, "final": 35},
    "status": "Active"
}

total_score = sum(student_record["scores"].values())
print(f"รหัส: {student_record['student_id']} ชื่อ: {student_record['name']}")
print(f"คะแนนรวม: {total_score}/100")

# 2. การใช้ Set ตรวจสอบสมาชิกชมรมวิชาการ
robotics_club = {"สมชาย", "กานดา", "วิชัย", "สมหญิง"}
coding_club = {"กานดา", "เอกพล", "สมเกียรติ", "สมชาย"}

# นักเรียนที่อยู่ทั้งสองชมรม (Intersection)
active_both = robotics_club & coding_club
print(f"นักเรียนที่อยู่ทั้งสองชมรม: {active_both}")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
รหัส: 6701001 ชื่อ: กานดา พรประสิทธิ์
คะแนนรวม: 95/100
นักเรียนที่อยู่ทั้งสองชมรม: {'สมชาย', 'กานดา'}
Pro-Tip: หากต้องการลบสมาชิกที่ซ้ำกันออกจากลิสต์อย่างรวดเร็ว สามารถแปลงเป็นเซตแล้วแปลงกลับเป็นลิสต์ได้ทันที เช่น clean_list = list(set(duplicate_list))
ใบกิจกรรมฝึกปฏิบัติการ 3.2
ให้นักเรียนเขียนโปรแกรมนับความถี่ของคำในประโยคภาษาอังกฤษ โดยใช้ Dictionary เก็บคำเป็น Key และเก็บจำนวนครั้งที่พบเป็น Value
Solution Guide
text = "python is fun and python is powerful"
words = text.split()
freq = {}

for w in words:
    freq[w] = freq.get(w, 0) + 1

for word, count in freq.items():
    print(f"คำว่า '{word}': พบ {count} ครั้ง")
หน่วยที่ 3: โครงสร้างข้อมูลและการเขียนโปรแกรมแบบโมดูล

บทที่ 11: การสร้างฟังก์ชันและการจัดขอบเขตตัวแปร (Functions & Scope)

Reusable Functions, Parameters, Return Values & Scope
3 คาบ (150 นาที)
K: เข้าใจหลักการ Modular Programming และขอบเขตตัวแปร (LEGB Rule) P: นิยามฟังก์ชันพร้อม Default Arguments และ Type Annotations ได้ A: ออกแบบโค้ดที่มีความกระชับ ไม่เขียนโค้ดซ้ำซ้อน (DRY Principle)

ฟังก์ชัน (Function) คือบล็อกของโค้ดที่มีชื่อเรียก สามารถนำกลับมาใช้ซ้ำได้ตามหลัก Don't Repeat Yourself (DRY):

  • การนิยามใช้คีย์เวิร์ด def function_name(params):
  • การส่งคืนค่าใช้คำสั่ง return
  • Default Arguments: การกำหนดค่าเริ่มต้นให้พารามิเตอร์
  • Variable Scope: ขอบเขตตัวแปร Local (ใช้ได้เฉพาะในฟังก์ชัน) เทียบกับ Global (ใช้ได้ทั่วทั้งโปรแกรม)
  • *args & **kwargs: การรับพารามิเตอร์แบบไม่จำกัดจำนวน
Python 3.10+ Script
# ฟังก์ชันคำนวณภาษีและยอดสุทธิ พร้อม Type Annotations
def calculate_invoice(subtotal: float, vat_rate: float = 0.07) -> dict:
    """ฟังก์ชันคำนวณภาษีมูลค่าเพิ่มและยอดรวมสุทธิ"""
    vat_amount = subtotal * vat_rate
    net_total = subtotal + vat_amount
    return {
        "subtotal": round(subtotal, 2),
        "vat": round(vat_amount, 2),
        "net_total": round(net_total, 2)
    }

# ฟังก์ชันรับพารามิเตอร์แบบยืดหยุ่น (*args)
def calculate_class_average(class_name: str, *scores) -> None:
    avg = sum(scores) / len(scores) if scores else 0
    print(f"ห้องเรียน {class_name}: นักเรียน {len(scores)} คน | เฉลี่ย: {avg:.2f}")

bill = calculate_invoice(1500.0)
print(f"ยอดซื้อ: {bill['subtotal']} บ. | ภาษี: {bill['vat']} บ. | สุทธิ: {bill['net_total']} บ.")
calculate_class_average("ปวช. 2/1", 85, 92, 78, 64, 88)
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ยอดซื้อ: 1500.0 บ. | ภาษี: 105.0 บ. | สุทธิ: 1605.0 บ.
ห้องเรียน ปวช. 2/1: นักเรียน 5 คน | เฉลี่ย: 81.40
Docstrings สำคัญมากในงานวิชาการ: การเขียนข้อความอธิบายการทำงานของฟังก์ชันภายในเครื่องหมายคำพูดสามชุด """...""" ใต้ชื่อฟังก์ชัน ช่วยให้ผู้อื่นเข้าใจวัตถุประสงค์และประเภทของข้อมูลได้อย่างรวดเร็ว
ใบกิจกรรมฝึกปฏิบัติการ 3.3
ให้นักเรียนเขียนฟังก์ชันแปลงอุณหภูมิจากเซลเซียสเป็นฟาเรนไฮต์: F = (C * 9/5) + 32 และเควิน: K = C + 273.15 โดยส่งคืนค่าเป็น tuple (F, K)
Solution Guide
def convert_temperature(celsius: float):
    fahrenheit = (celsius * 9/5) + 32
    kelvin = celsius + 273.15
    return fahrenheit, kelvin

f, k = convert_temperature(35)
print(f"35°C = {f:.1f}°F หรือ {k:.2f}K")
หน่วยที่ 3: โครงสร้างข้อมูลและการเขียนโปรแกรมแบบโมดูล

บทที่ 12: โมดูลและไลบรารีมาตรฐาน (Standard Modules: math, random, datetime)

Batteries Included: Standard Libraries Integration
2 คาบ (100 นาที)
K: รู้จักคลังไลบรารีมาตรฐานที่มาพร้อมกับ Python P: เรียกใช้ฟังก์ชันจากโมดูล math, random และ datetime ได้ถูกต้อง A: นำไลบรารีมาตรฐานมาประยุกต์แก้โจทย์คณิตศาสตร์และวิทยาศาสตร์

Python มีปรัชญา "Batteries Included" ซึ่งหมายถึงมีไลบรารีมาตรฐานคุณภาพสูงให้พร้อมใช้งานทันทีโดยไม่ต้องติดตั้งเพิ่มเติม:

  • math: ฟังก์ชันทางคณิตศาสตร์ขั้นสูง เช่น math.sqrt(), math.pi, math.ceil(), math.floor()
  • random: การสุ่มตัวเลขและตัวเลือก เช่น random.randint(a, b), random.choice(list), random.shuffle(list)
  • datetime: การจัดการวัน เวลา และระยะเวลา เช่น datetime.datetime.now(), การคำนวณวันหมดอายุด้วย timedelta
Python 3.10+ Script
import math
import random
import datetime

# 1. math module: คำนวณพื้นที่วงกลม
radius = 5.0
circle_area = math.pi * math.pow(radius, 2)
print(f"พื้นที่วงกลมรัศมี {radius} = {circle_area:.2f} ตร.ซม.")

# 2. random module: การสุ่มจับฉลากของขวัญ
prizes = ["ทุนการศึกษา 1,000 บ.", "แฟลชไดรฟ์ 64GB", "หนังสือวิทย์", "กระบอกน้ำ"]
winner = random.choice(prizes)
lucky_num = random.randint(100, 999)
print(f"หมายเลขผู้โชคดี: {lucky_num} ได้รับ: {winner}")

# 3. datetime module: แสดงวันที่ตามปฏิทินไทย
now = datetime.datetime.now()
buddhist_year = now.year + 543
print(f"บันทึกข้อมูลเมื่อ: วันที่ {now.strftime('%d/%m/')}{buddhist_year} เวลา {now.strftime('%H:%M:%S')} น.")
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
พื้นที่วงกลมรัศมี 5.0 = 78.54 ตร.ซม.
หมายเลขผู้โชคดี: 482 ได้รับ: ทุนการศึกษา 1,000 บ.
บันทึกข้อมูลเมื่อ: วันที่ 07/09/2567 เวลา 10:30:00 น.
Pro-Tip การ Import: ควร import เฉพาะโมดูลที่ใช้งานจริง หลีกเลี่ยงการใช้ from module import * เพราะจะทำให้เกิดการชนกันของชื่อฟังก์ชัน (Namespace Pollution)
ใบกิจกรรมฝึกปฏิบัติการ 3.4
ให้นักเรียนเขียนโปรแกรมจำลองการทอยลูกเต๋า 2 ลูกพร้อมกัน 100 ครั้ง แล้วนับว่ามีจำนวนครั้งที่ผลรวมของแต้มเท่ากับ 7 กี่ครั้ง
Solution Guide
import random

sum_seven_count = 0
trials = 100

for _ in range(trials):
    dice1 = random.randint(1, 6)
    dice2 = random.randint(1, 6)
    if (dice1 + dice2) == 7:
        sum_seven_count += 1

print(f"ทอยเต๋า {trials} ครั้ง ได้แต้มรวมเท่ากับ 7 จำนวน: {sum_seven_count} ครั้ง ({(sum_seven_count/trials)*100:.1f}%)")
หน่วยที่ 4: การจัดการไฟล์ OOP และโครงงานประยุกต์

บทที่ 13: การจัดการไฟล์ข้อมูล (File Handling: Text, CSV, JSON)

File I/O Operations, Delimited CSV & JSON Serialization
2 คาบ (100 นาที)
K: เข้าใจโหมดการเปิดไฟล์ ('r', 'w', 'a') และการเข้ารหัส UTF-8 P: อ่านและบันทึกข้อมูลตาราง CSV และโครงสร้าง JSON ได้ถูกต้อง A: ตระหนักถึงความปลอดภัยของข้อมูลและการปิดไฟล์อย่างถูกวิธี

การจัดเก็บข้อมูลถาวร (Data Persistence) ช่วยให้ข้อมูลไม่สูญหายเมื่อปิดโปรแกรม ใน Python ใช้โครงสร้าง Context Manager (with open(...) as f:) ซึ่งจะปิดไฟล์ให้อัตโนมัติแม้เกิดข้อผิดพลาด:

  • โหมดไฟล์: 'r' (อ่านอย่างเดียว), 'w' (เขียนทับใหม่), 'a' (เขียนต่อท้าย)
  • โมดูล csv: สำหรับจัดการข้อมูลแบบตาราง เช่น รายชื่อนักเรียนและคะแนน
  • โมดูล json: สำหรับจัดการข้อมูลชนิด JSON ที่นิยมใช้ในเว็บแอปพลิเคชันและ API ด้วยเมธอด json.dump() และ json.load()
Python 3.10+ Script
import json
import csv
import io

# 1. การทำงานกับข้อมูล JSON (Configuration Data)
course_metadata = {
    "course_id": "CS101",
    "course_name": "Python Programming",
    "credit": 1.0,
    "units": ["Basics", "Control", "Data Structures", "OOP"]
}

# แปลง Dictionary เป็น JSON String
json_string = json.dumps(course_metadata, ensure_ascii=False, indent=2)
print("=== โครงสร้างข้อมูล JSON ===")
print(json_string)

# 2. การสร้างและเขียนข้อมูล CSV จำลองในหน่วยความจำ
csv_buffer = io.StringIO()
csv_writer = csv.writer(csv_buffer)
csv_writer.writerow(["รหัส", "ชื่อ-สกุล", "ผลการเรียน"])
csv_writer.writerow(["6701", "สมชาย เรียนดี", 4.0])
csv_writer.writerow(["6702", "กานดา สดใส", 3.5])

print("\n=== ข้อมูลตาราง CSV ===")
print(csv_buffer.getvalue().strip())
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
=== โครงสร้างข้อมูล JSON ===
{
  "course_id": "CS101",
  "course_name": "Python Programming",
  "credit": 1.0,
  "units": [
    "Basics",
    "Control",
    "Data Structures",
    "OOP"
  ]
}

=== ข้อมูลตาราง CSV ===
รหัส,ชื่อ-สกุล,ผลการเรียน
6701,สมชาย เรียนดี,4.0
6702,กานดา สดใส,3.5
สำคัญมากสำหรับภาษาไทย: ควรกำหนดพารามิเตอร์ encoding='utf-8' เสมอเมื่อเปิดไฟล์ข้อความ เพื่อป้องกันปัญหาตัวอักษรภาษาไทยกลายเป็นภาษาต่างดาว (Mojibake)
ใบกิจกรรมฝึกปฏิบัติการ 4.1
ให้นักเรียนเขียนโปรแกรมบันทึกบันทึกประจำวัน (Diary) ลงในไฟล์ diary.txt โดยใช้โหมด 'a' (Append) พร้อมใส่วันที่และเวลาบันทึกอัตโนมัติ
Solution Guide
import datetime

now_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
entry = "วันนี้ได้เรียนรู้การเขียนไฟล์ด้วย Python มีประโยชน์มาก!"

# ในการใช้งานจริงเปิดไฟล์: with open('diary.txt', 'a', encoding='utf-8') as f:
output_line = f"[{now_str}] {entry}\n"
print("บันทึกสำเร็จ:\n" + output_line)
หน่วยที่ 4: การจัดการไฟล์ OOP และโครงงานประยุกต์

บทที่ 14: การเขียนโปรแกรมเชิงวัตถุเบื้องต้น (OOP: Classes & Objects)

Object-Oriented Programming Fundamentals, Attributes & Methods
2 คาบ (100 นาที)
K: เข้าใจแนวคิด Class, Object, Instance และ Constructor (__init__) P: ออกแบบและสร้าง Class ที่มี Attributes และ Methods ได้ A: มองปัญหาในโลกแห่งความจริงให้อยู่ในรูปของโมเดลเชิงวัตถุ

การเขียนโปรแกรมเชิงวัตถุ (OOP) เป็นกระบวนทัศน์ที่จำลองสิ่งต่างๆ ในโลกแห่งความเป็นจริงให้อยู่ในรูปของ วัตถุ (Object) ซึ่งประกอบด้วย:

  • คลาส (Class): พิมพ์เขียวหรือแม่แบบ (Blueprint) ในการสร้างวัตถุ
  • อินสแตนซ์ (Instance): วัตถุจริงที่สร้างขึ้นจากคลาส
  • แอตทริบิวต์ (Attributes): คุณลักษณะหรือข้อมูลประจำวัตถุ เช่น ชื่อ, คะแนน, อายุ
  • เมธอด (Methods): ฟังก์ชันหรือพฤติกรรมที่วัตถุนั้นสามารถกระทำได้
  • __init__(self, ...): คอนสตรักเตอร์ (Constructor) เมธอดพิเศษที่ถูกเรียกใช้ทันทีเมื่อมีการสร้างวัตถุใหม่
Python 3.10+ Script
# การสร้างคลาสนักเรียน (Student) ตามหลักการ OOP
class Student:
    school_name = "โรงเรียนสารสนเทศวิทยา"  # Class Attribute

    def __init__(self, student_id: str, name: str, midterm: float, final: float):
        self.student_id = student_id          # Instance Attribute
        self.name = name
        self.midterm = midterm
        self.final = final

    def get_total_score(self) -> float:
        return self.midterm + self.final

    def get_grade(self) -> str:
        total = self.get_total_score()
        if total >= 80: return "4"
        if total >= 70: return "3"
        if total >= 60: return "2"
        if total >= 50: return "1"
        return "0"

    def display_info(self):
        print(f"[{self.student_id}] {self.name} | รวม: {self.get_total_score():.1f} | เกรด: {self.get_grade()}")

# สร้างวัตถุ (Object) จากคลาส Student
s1 = Student("6701", "สมชาย ภูวนารถ", 42.0, 46.0)
s2 = Student("6702", "สุดา แสนดี", 32.0, 36.5)

s1.display_info()
s2.display_info()
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
[6701] สมชาย ภูวนารถ | รวม: 88.0 | เกรด: 4
[6702] สุดา แสนดี | รวม: 68.5 | เกรด: 2
พารามิเตอร์ self คืออะไร?: self เป็นตัวแทนของวัตถุแต่ละตัวที่กำลังถูกเรียกใช้งาน ทำให้ Python ทราบว่ากำลังเข้าถึงข้อมูลของวัตถุตัวใดตัวหนึ่งได้อย่างถูกต้อง
ใบกิจกรรมฝึกปฏิบัติการ 4.2
ให้นักเรียนสร้างคลาส Book สำหรับระบบห้องสมุด โดยมี attributes: ชื่อหนังสือ, ผู้แต่ง, สถานะยืม (True/False) และ methods: borrow() และ return_book()
Solution Guide
class Book:
    def __init__(self, title: str, author: str):
        self.title = title
        self.author = author
        self.is_borrowed = False

    def borrow(self):
        if not self.is_borrowed:
            self.is_borrowed = True
            print(f"ยืมหนังสือ '{self.title}' สำเร็จ")
        else:
            print(f"ขออภัย หนังสือ '{self.title}' ถูกยืมไปแล้ว")

b1 = Book("เรียนรู้ Python ฉบับสมบูรณ์", "ครูบาส")
b1.borrow()
b1.borrow()
หน่วยที่ 4: การจัดการไฟล์ OOP และโครงงานประยุกต์

บทที่ 15: การสืบทอดและการห่อหุ้มข้อมูล (Inheritance & Encapsulation)

Advanced OOP: Inheritance, Super & Encapsulation with Properties
2 คาบ (100 นาที)
K: เข้าใจเสาหลัก OOP: การสืบทอด (Inheritance) และการซ่อนข้อมูล (Encapsulation) P: ใช้คำสั่ง super() และกำหนด Private Attributes (__variable) ได้ A: ออกแบบโครงสร้างคลาสแบบลำดับขั้นที่มีความปลอดภัยและยืดหยุ่น

เสาหลักขั้นสูงของการเขียนโปรแกรมเชิงวัตถุ:

  • การห่อหุ้มข้อมูล (Encapsulation): การปกป้องข้อมูลภายในวัตถุไม่ให้ภายนอกเข้าถึงหรือแก้ไขได้โดยตรง ใน Python ใช้เครื่องหมาย __ นำหน้าชื่อตัวแปร เช่น self.__balance (Private Attribute) และเข้าถึงผ่าน Getter / Setter
  • การสืบทอดคุณสมบัติ (Inheritance): การสร้างคลาสใหม่ (Subclass / Child Class) โดยต่อยอดจากคลาสเดิม (Superclass / Parent Class) ช่วยให้ไม่ต้องเขียนโค้ดซ้ำ และใช้คำสั่ง super().__init__() เพื่อเรียกใช้งานคอนสตรักเตอร์ของคลาสแม่
  • Polymorphism / Method Overriding: การที่คลาสลูกสามารถนิยามการทำงานของเมธอดให้แตกต่างจากคลาสแม่ได้
Python 3.10+ Script
# ระบบบัญชีธนาคาร แสดง Encapsulation และ Inheritance
class BankAccount:
    def __init__(self, account_no: str, owner: str, balance: float = 0.0):
        self.account_no = account_no
        self.owner = owner
        self.__balance = balance  # Private Attribute ป้องกันการแก้ไขโดยตรง

    def deposit(self, amount: float):
        if amount > 0:
            self.__balance += amount
            print(f"ฝากเงิน {amount:,.2f} บาท สำเร็จ (คงเหลือ: {self.__balance:,.2f} บ.)")

    def withdraw(self, amount: float):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            print(f"ถอนเงิน {amount:,.2f} บาท สำเร็จ (คงเหลือ: {self.__balance:,.2f} บ.)")
        else:
            print("ยอดเงินในบัญชีไม่เพียงพอ!")

    def get_balance(self) -> float:
        return self.__balance


# คลาสลูกที่สืบทอดคุณสมบัติ (Inheritance)
class SavingsAccount(BankAccount):
    def __init__(self, account_no: str, owner: str, balance: float = 0.0, interest_rate: float = 0.015):
        super().__init__(account_no, owner, balance)
        self.interest_rate = interest_rate

    def apply_interest(self):
        interest = self.get_balance() * self.interest_rate
        self.deposit(interest)
        print(f"รับดอกเบี้ยเงินฝากอัตรา {self.interest_rate*100}% เรียบร้อย")

acc = SavingsAccount("001-2-34567", "ครูบาส", 10000)
acc.deposit(5000)
acc.apply_interest()
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
ฝากเงิน 5,000.00 บาท สำเร็จ (คงเหลือ: 15,000.00 บ.)
ฝากเงิน 225.00 บาท สำเร็จ (คงเหลือ: 15,225.00 บ.)
รับดอกเบี้ยเงินฝากอัตรา 1.5% เรียบร้อย
ทำไมต้องใช้ Encapsulation?: ช่วยป้องกันข้อผิดพลาด เช่น ผู้ใช้งานเผลอแก้ค่ายอดเงิน acc.__balance = -9999 ได้โดยตรง ทำให้ระบบมีความน่าเชื่อถือและปลอดภัยตามมาตรฐานสากล
ใบกิจกรรมฝึกปฏิบัติการ 4.3
ให้นักเรียนสร้างคลาส Person (ชื่อ, อายุ) และสร้างคลาสลูก Teacher ที่สืบทอดจาก Person โดยเพิ่มคุณสมบัติ กลุ่มสาระการเรียนรู้ และเงินเดือน
Solution Guide
class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

class Teacher(Person):
    def __init__(self, name: str, age: int, subject: str, salary: float):
        super().__init__(name, age)
        self.subject = subject
        self.salary = salary

t = Teacher("ครูบาส", 32, "วิทยาการคำนวณ", 35000)
print(f"{t.name} (อายุ {t.age} ปี) สอนวิชา {t.subject}")
หน่วยที่ 4: การจัดการไฟล์ OOP และโครงงานประยุกต์

บทที่ 16: โครงงานประยุกต์พัฒนาระบบสารสนเทศ (Mini Project Capstone)

Integration Capstone Project: Academic Performance System
3 คาบ (150 นาที)
K: บูรณาการองค์ความรู้ทั้ง 4 หน่วยการเรียนรู้สู่โครงงานจริง P: พัฒนาระบบที่มีการประมวลผล จัดการไฟล์ และคำนวณสถิติ A: มุ่งมั่นในการสร้างสรรค์นวัตกรรมดิจิทัลเพื่อแก้ปัญหาในชีวิตจริง

โครงงานประยุกต์ (Capstone Project) เป็นการประมวลความรู้ตลอดทั้งหลักสูตร เพื่อให้นักเรียนได้ลงมือปฏิบัติจริงตามกระบวนการพัฒนาซอฟต์แวร์:

  • 1. การกำหนดความต้องการ (Requirements Analysis): วิเคราะห์โจทย์ปัญหา เช่น ระบบบันทึกและประมวลผลคะแนนนักเรียน
  • 2. การออกแบบระบบ (System Design): ออกแบบคลาส โมเดลข้อมูล และเมนูควบคุมการทำงาน
  • 3. การลงมือพัฒนา (Implementation): เขียนโค้ดเชื่อมโยงระหว่าง Data, Business Logic และ User Interface
  • 4. การทดสอบและปรับปรุง (Testing & Debugging): ตรวจสอบกรณีทดสอบ (Test Cases) และรับมือข้อผิดพลาด
  • 5. การจัดทำเอกสารและรายงาน (Documentation): จัดทำคู่มือและรายงาน 5 บท สำหรับการประเมินผลสัมฤทธิ์
Python 3.10+ Script
# ระบบประมวลผลและออกรายงานผลการเรียนรายวิชา (Grade Analysis System)
class CourseReport:
    def __init__(self, course_name: str):
        self.course_name = course_name
        self.students = []

    def add_student(self, name: str, hw: float, mid: float, fin: float):
        total = hw + mid + fin
        grade = "4" if total >= 80 else "3" if total >= 70 else "2" if total >= 60 else "1" if total >= 50 else "0"
        self.students.append({
            "name": name, "total": total, "grade": grade
        })

    def generate_report(self):
        print(f"==================================================")
        print(f" รายงานสรุปผลสัมฤทธิ์รายวิชา: {self.course_name}")
        print(f"==================================================")
        print(f"{'ชื่อ-สกุล':<22} | {'คะแนนรวม':<10} | {'ระดับเกรด':<8}")
        print("-" * 50)
        total_sum = 0
        for s in self.students:
            print(f"{s['name']:<22} | {s['total']:<10.1f} | {s['grade']:<8}")
            total_sum += s['total']
        
        avg = total_sum / len(self.students) if self.students else 0
        print("-" * 50)
        print(f"จำนวนนักเรียนทั้งหมด: {len(self.students)} คน")
        print(f"คะแนนเฉลี่ยทั้งชั้นเรียน: {avg:.2f} คะแนน")
        print(f"==================================================")

report = CourseReport("20901-2006 การเขียนโปรแกรมภาษา Python (ปวช. 2)")
report.add_student("สมชาย สุขเกษม", 28.0, 32.5, 34.0)
report.add_student("กานดา มณีรัตน์", 30.0, 34.0, 35.5)
report.add_student("วิศวะ พัฒนาการ", 22.0, 25.0, 28.0)
report.generate_report()
ผลลัพธ์การทำงานของโปรแกรม (Program Output)
==================================================
 รายงานสรุปผลสัมฤทธิ์รายวิชา: 20901-2006 การเขียนโปรแกรมภาษา Python (ปวช. 2)
==================================================
ชื่อ-สกุล               | คะแนนรวม   | ระดับเกรด
--------------------------------------------------
สมชาย สุขเกษม          | 94.5       | 4       
กานดา มณีรัตน์          | 99.5       | 4       
วิศวะ พัฒนาการ          | 75.0       | 3       
--------------------------------------------------
จำนวนนักเรียนทั้งหมด: 3 คน
คะแนนเฉลี่ยทั้งชั้นเรียน: 89.67 คะแนน
==================================================
เกณฑ์การประเมินโครงงาน (ว.PA): ควรเน้นการวัดผลตามสภาพจริง (Authentic Assessment) ทั้งในด้านความถูกต้องของการทำงาน (Functionality), ความเป็นระเบียบของโค้ด (Clean Code), การมีส่วนร่วมในทีม และการนำเสนอผลงาน
กิจกรรมโครงงานประยุกต์ปลายภาคเรียน (Final Capstone Lab)
ให้นักเรียนรวมกลุ่ม 2-3 คน พัฒนาโปรแกรมภาษา Python ขนาดเล็กเพื่อแก้ปัญหาในโรงเรียนหรือชุมชนอย่างน้อย 1 ปัญหา โดยต้องมีส่วนประกอบ: เมนูผู้ใช้, การคำนวณทางคณิตศาสตร์, การใช้ฟังก์ชันหรือคลาส และการบันทึกข้อมูลลงไฟล์
Solution Guide
# แนวทางหัวข้อโครงงานที่แนะนำ:
# 1. ระบบจัดการคลังพัสดุและยืมคืนอุปกรณ์ห้องปฏิบัติการ
# 2. โปรแกรมคำนวณสารอาหารและพลังงานแคลอรี่ประจำวัน
# 3. ระบบบันทึกเวลาเรียนและการประเมินสถิติการมาเรียน
# 4. เกมตอบคำถามความรู้ทั่วไปเชิงการศึกษา (Educational Quiz Game)

ประมวลรายวิชา (Course Syllabus) - ปวช. 2

การเขียนโปรแกรมภาษา Python (Python Programming)

หลักสูตรประกาศนียบัตรวิชาชีพ (ปวช. 2) | สาขาวิชาเทคโนโลยีสารสนเทศ / คอมพิวเตอร์ธุรกิจ
มาตรฐานและสมรรถนะรายวิชา: สมรรถนะวิชาชีพ ปวช. 2 สามารถวิเคราะห์ขั้นตอนวิธี ออกแบบอัลกอริทึม เขียนโปรแกรมภาษา Python จัดการโครงสร้างข้อมูล และพัฒนาโครงงานซอฟต์แวร์ประยุกต์
โครงสร้างการจัดการเรียนรู้ 4 หน่วยหลัก:
หน่วยที่ชื่อหน่วยการเรียนรู้เวลา (ชม.)คะแนน
1พื้นฐานการคิดเชิงคำนวณและเริ่มต้นกับ Python (บท 1-4)815
2โครงสร้างควบคุมและการตัดสินใจ (บท 5-8)1220
สอบวัดผลกลางภาคเรียน220
3โครงสร้างข้อมูลและการเขียนโปรแกรมแบบโมดูล (บท 9-12)1015
4การจัดการไฟล์ OOP และโครงงานประยุกต์ (บท 13-16)815
สอบวัดผลปลายภาคเรียน / โครงงาน215
รวมทั้งสิ้น40100

สไลด์บรรยายอิเล็กทรอนิกส์ (Presentation Deck)

ชุดสไลด์บรรยายอิเล็กทรอนิกส์สำหรับครูใช้สอนและนักเรียนใช้ทบทวน ออกแบบด้วยอัตราส่วน 16:9 สวยงาม คมชัด ประกอบด้วย:

  • Slide Deck 1: Computational Thinking & Python Setup (45 สไลด์)
  • Slide Deck 2: Control Structures, Loops & Exceptions (52 สไลด์)
  • Slide Deck 3: Data Structures & Modular Functions (60 สไลด์)
  • Slide Deck 4: File I/O, OOP Architecture & Capstone Project (50 สไลด์)
ตัวอย่างโค้ดและผังงานทั้งหมดในสไลด์ สอดคล้องกับตัวอย่างโค้ดในเว็บไซต์นี้ 100% สามารถดาวน์โหลดซอร์สโค้ดไฟล์ .zip ด้านล่างไปเปิดควบคู่ได้ทันที

คู่มือและเกณฑ์โครงงานคอมพิวเตอร์ (Project Handbook)

โครงสร้างรายงานโครงงาน 5 บท (ตามมาตรฐาน สพฐ.)
  1. บทที่ 1 บทนำ: ความเป็นมาและความสำคัญ, วัตถุประสงค์, ขอบเขตของโครงงาน, ประโยชน์ที่คาดว่าจะได้รับ
  2. บทที่ 2 เอกสารและงานวิจัยที่เกี่ยวข้อง: ทฤษฎีภาษา Python, อัลกอริทึมที่ใช้, ระบบฐานข้อมูลหรือไฟล์
  3. บทที่ 3 วิธีการดำเนินงาน: แผนผังระบบ (System Flowchart), การออกแบบ Class Diagram, แผนปฏิบัติงาน
  4. บทที่ 4 ผลการดำเนินงาน: หน้าจอส่วนต่อประสานโปรแกรม (UI), ผลการทดสอบกรณีทดสอบ (Test Cases)
  5. บทที่ 5 สรุปผลและข้อเสนอแนะ: สรุปผลสัมฤทธิ์ ปัญหาและอุปสรรค แนวทางการพัฒนาต่อยอด
เกณฑ์การวัดและประเมินผลรูบริกส์ (15 คะแนน):
  • ความคิดริเริ่มสร้างสรรค์และการแก้ปัญหาในชุมชน (4 คะแนน)
  • ความถูกต้องและประสิทธิภาพของโปรแกรมคอมพิวเตอร์ (5 คะแนน)
  • ความสมบูรณ์ของเอกสารรายงานและคู่มือการใช้งาน (3 คะแนน)
  • ทักษะการนำเสนอและการตอบข้อซักถาม (3 คะแนน)
คัดลอกโค้ดสำเร็จ!