❖ 1. ស្គាល់ Python ជាដំបូង

1.1 Python ជាភាសាអ្វី ហើយសម្រាប់ធ្វើអ្វី រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

Python ជាភាសាកម្មវិធីមួយដែលផ្តោតលើភាពសាមញ្ញ៖ កូដមួយបន្ទាត់អាចនិយាយបានច្រើនជាងភាសាផ្សេង។ វាមិនមែនសម្រាប់វិស័យតែមួយទេ ថែមទាំងប្រើប្រាស់ចាប់ពីសរសេរ Script តូចៗសម្រាប់សន្សំសំចៃពេលធ្វើការដដែលៗ រហូតដល់ស្ថាបនាប្រព័ន្ធវិភាគទិន្នន័យធំៗ។

ប្រៀបធៀបខ្លីៗ៖ បើ C តម្រូវឲ្យអ្នកគ្រប់គ្រងគ្រប់ព័ត៌មានលម្អិត (memory, type) ដោយផ្ទាល់ដៃ នោះ Python លាក់ភាពស្មុគស្មាញទាំងនោះ ដើម្បីឲ្យអ្នកផ្តោតលើ "តើកម្មវិធីនេះត្រូវធ្វើអ្វី" ជាជាង "តើកុំព្យូទ័រដំណើរការវាបែបណា"។

1.2 ការដំឡើង និងកន្លែងសរសេរកូដ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

ជម្រើសពិពណ៌នា
python.orgទាញយក Installer ផ្លូវការសម្រាប់ Windows/macOS/Linux
VS Code + Python ExtensionEditor ពេញនិយមបំផុតសម្រាប់សរសេរ Project ធំតូចគ្រប់ទំហំ
Google Colab / Replitសរសេរ និងរត់កូដភ្លាមៗលើ Browser ដោយមិនចាំបាច់ដំឡើងអ្វីទាំងអស់

1.3 REPL និង File Scriptដែលពីរវិធីរត់កូដ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

REPL (Read-Eval-Print Loop) ជាកន្លែងសរសេរកូដមួយបន្ទាត់ ហើយឃើញលទ្ធផលភ្លាមៗ ដែលល្អសម្រាប់សាកល្បងគំនិតលឿនៗ។ ចំណែក File Script (ឧ. app.py) ជាកន្លែងផ្ទុកកម្មវិធីពេញលេញដែលរត់ម្តងទាំងអស់។

# វិធីទី១: REPL (វាយក្នុង Terminal ដោយផ្ទាល់)
>>> 5 + 3
8

# វិធីទី២: File script (រក្សាទុកជា greet.py រួចរត់)
print("សូមស្វាគមន៍មកកាន់ពិភព Python!")
python greet.py

លទ្ធផល៖

សូមស្វាគមន៍មកកាន់ពិភព Python!

❖ 2. អថេរ និងប្រភេទទិន្នន័យ

2.1 ការប្រកាសអថេរ (Variables) រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

Python មិនតម្រូវឲ្យប្រកាសប្រភេទទិន្នន័យទុកមុនទេ។ គ្រាន់តែដាក់ឈ្មោះ និងតម្លៃ Python នឹងស្គាល់ប្រភេទដោយខ្លួនឯង។

city = "សៀមរាប"
temperature = 34.5
is_sunny = True

print(city, temperature, is_sunny)

លទ្ធផល៖ សៀមរាប 34.5 True

2.2 ប្រភេទទិន្នន័យសំខាន់ៗ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

ប្រភេទឧទាហរណ៍ការប្រើប្រាស់
int7, -3, 1500រាប់ចំនួន (អាយុ, ចំនួនទំនិញ)
float3.14, 99.9តម្លៃដែលមានទសភាគ (តម្លៃទំនិញ, ទម្ងន់)
str"សួស្តី"អត្ថបទ, ឈ្មោះ, ចំណងជើង
boolTrue / Falseលក្ខខណ្ឌ ត្រូវ ឬ ខុស
print(type(7))
print(type(3.14))
print(type("សួស្តី"))
print(type(True))

2.3 ការបម្លែងប្រភេទទិន្នន័យ (Type Conversion) រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

ជួនកាលទិន្នន័យមួយត្រូវបម្លែងទៅជាប្រភេទផ្សេង មុននឹងគណនាបាន។ ឧទាហរណ៍ ទិន្នន័យដែលបានពី input() តែងតែជា str ជានិច្ច។

age_text = "16"
age_number = int(age_text)

print(age_number + 4)  # ដំណើរការព្រោះឥឡូវជាលេខ
# print(age_text + 4)  # នេះនឹងបណ្តាលឱ្យមានកំហុស TypeError

លទ្ធផល៖ 20

❖ 3. ការទំនាក់ទំនងជាមួយអ្នកប្រើប្រាស់

3.1 ការទទួលទិន្នន័យជាមួយ input() រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

city = input("អ្នកមកពីទីក្រុងណា? ")
print("ល្អណាស់! អ្នកមកពី", city)

3.2 ការបង្ហាញលទ្ធផលឲ្យស្អាតជាមួយ f-string រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

f-string (បន្ថំពាក្យ f ពីមុខ) អនុញ្ញាតឲ្យបញ្ចូលអថេរដោយផ្ទាល់ក្នុងអត្ថបទ ដោយមិនចាំបាច់ភ្ជាប់ដោយសញ្ញា +

name = "សុវណ្ណ"
score = 87.5

print(f"សិស្ស {name} ទទួលបានពិន្ទុ {score} ភាគរយ")
print(f"ជាបន្ទាត់ខ្លី: {score:.1f}%")  # កំណត់ចំនួនខ្ទង់ក្រោយចំណុច

លទ្ធផល៖

សិស្ស សុវណ្ណ ទទួលបានពិន្ទុ 87.5 ភាគរយ
ជាបន្ទាត់ខ្លី: 87.5%

3.3 ការអនុវត្តជាក់ស្តែង៖ កម្មវិធីគណនា BMI រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

តោះផ្សំចំណុចទាំងបីខាងលើ (input, type conversion, f-string) ធ្វើជាកម្មវិធីតូចមួយ ដើម្បីគណនាសន្ទស្សន៍ម៉ាស់រាងកាយ (BMI)។

weight = float(input("ទម្ងន់ (គីឡូក្រាម): "))
height = float(input("កម្ពស់ (ម៉ែត្រ): "))

bmi = weight / (height ** 2)
print(f"សន្ទស្សន៍ម៉ាស់រាងកាយរបស់អ្នកគឺ {bmi:.2f}")

លទ្ធផល (ឧទាហរណ៍ បញ្ចូល 60 និង 1.65)៖

សន្ទស្សន៍ម៉ាស់រាងកាយរបស់អ្នកគឺ 22.04

❖ 4. ការសម្រេចចិត្ត (Decision Making)

4.1 if / elif / else រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

hour = 19

if hour < 12:
    print("អរុណសួស្តី")
elif hour < 18:
    print("ទិវាសួស្តី")
else:
    print("សាយណ្ហសួស្តី")

លទ្ធផល៖ សាយណ្ហសួស្តី

ចំណាំ៖ Python ប្រើ Indentation (ដកឲ្យចូលក្នុង) ជំនួសឲ្យ { } ដើម្បីកំណត់ថាកូដមួយណាស្ថិតក្នុង Block មួយណា។

4.2 ការផ្សំលក្ខខណ្ឌជាមួយ and / or / not រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

age = 20
has_id_card = True

if age >= 18 and has_id_card:
    print("អនុញ្ញាតឲ្យបោះឆ្នោត")
else:
    print("មិនទាន់មានលក្ខណៈគ្រប់គ្រាន់")

4.3 ការអនុវត្តជាក់ស្តែង៖ កម្មវិធីត្រួតពិនិត្យពាក្យសម្ងាត់ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

តោះប្រើលក្ខខណ្ឌច្រើនស្រទាប់ ដើម្បីត្រួតពិនិត្យថាតើពាក្យសម្ងាត់មួយមានសុវត្ថិភាពគ្រប់គ្រាន់ដែរឬទេ។

password = input("បង្កើតពាក្យសម្ងាត់: ")

has_number = any(char.isdigit() for char in password)
is_long_enough = len(password) >= 8

if is_long_enough and has_number:
    print("ពាក្យសម្ងាត់នេះមានសុវត្ថិភាពល្អ")
elif not is_long_enough:
    print("ខ្លីពេក! ត្រូវយ៉ាងហោចណាស់ 8 តួអក្សរ")
else:
    print("គួរបន្ថែមលេខយ៉ាងហោចណាស់មួយខ្ទង់")

លទ្ធផល (ឧទាហរណ៍ បញ្ចូល "kh2025go")៖

ពាក្យសម្ងាត់នេះមានសុវត្ថិភាពល្អ

❖ 5. ការធ្វើម្តងទៀត (Loops)

5.1 for loopដែលដើរលើលំដាប់ដែលដឹងចំនួនស្រាប់ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

for hour in range(1, 6):
    print(f"ម៉ោងទី {hour}: បន្តធ្វើការ")

លទ្ធផល៖

ម៉ោងទី 1: បន្តធ្វើការ
ម៉ោងទី 2: បន្តធ្វើការ
ម៉ោងទី 3: បន្តធ្វើការ
ម៉ោងទី 4: បន្តធ្វើការ
ម៉ោងទី 5: បន្តធ្វើការ

5.2 while loopដែលដើរដរាបណាលក្ខខណ្ឌនៅពិត រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

battery = 100
while battery > 0:
    print(f"ថ្ម: {battery}%")
    battery -= 25

print("ថ្មអស់ហើយ!")

5.3 break និង continue រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

for number in range(1, 10):
    if number == 6:
        break          # បញ្ឈប់ loop ទាំងស្រុង
    if number % 2 == 0:
        continue        # រំលងលេខគូ
    print(number)

លទ្ធផល៖

1
3
5

5.4 ការអនុវត្តជាក់ស្តែង៖ ល្បែងទាយលេខ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

import random

secret = random.randint(1, 20)
guess = 0
attempts = 0

while guess != secret:
    guess = int(input("ទាយលេខពី 1 ដល់ 20: "))
    attempts += 1
    if guess < secret:
        print("ខ្ពស់ជាងនេះទៀត!")
    elif guess > secret:
        print("ទាបជាងនេះទៀត!")

print(f"ត្រូវហើយ! អ្នកទាយត្រូវក្នុងចំនួន {attempts} ដង")

❖ 6. ការប្រមូលទិន្នន័យ (Collections)

6.1 តើគួរប្រើមួយណា? List, Tuple, Set ឬ Dictionary រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

ប្រភេទតម្រូវការណាដែលសមស្រប
listបញ្ជីតម្រៀបលំដាប់ ដែលនឹងកែប្រែជាប្រចាំ (ឧ. កិច្ចការត្រូវធ្វើ)
tupleទិន្នន័យថេរដែលមិនចង់ឲ្យប្រែប្រួល (ឧ. កូអរដោនេ GPS)
setត្រូវការតែធាតុមិនស្ទួន (ឧ. បញ្ជីអ៊ីមែលដែលធ្លាប់ចុះឈ្មោះ)
dictត្រូវការស្វែងរកតម្លៃលឿនៗ តាមឈ្មោះសោ (ឧ. តម្លៃទំនិញតាមឈ្មោះ)

6.2 Listដែលកែប្រែ បន្ថែម និងលុបធាតុ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

tasks = ["ទិញឥវ៉ាន់", "សម្អាតផ្ទះ"]
tasks.append("សរសេររបាយការណ៍")
tasks.remove("សម្អាតផ្ទះ")

print(tasks)
print("ចំនួនកិច្ចការ:", len(tasks))

លទ្ធផល៖

['ទិញឥវ៉ាន់', 'សរសេររបាយការណ៍']
ចំនួនកិច្ចការ: 2

6.3 Dictionaryដែលស្វែងរកលឿនតាមឈ្មោះសោ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

prices = {"កាហ្វេ": 2.5, "នំបុ័ង": 1.2, "ទឹកក្រូច": 1.8}

item = "នំបុ័ង"
print(f"{item} តម្លៃ {prices[item]} ដុល្លារ")

prices["ទឹកតែ"] = 1.5  # បន្ថែមធាតុថ្មី
print(prices)

6.4 ការអនុវត្តជាក់ស្តែង៖ កម្មវិធីគ្រប់គ្រងបញ្ជីទិញឥវ៉ាន់ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

cart = {}

while True:
    item = input("បញ្ចូលឈ្មោះទំនិញ (ឬ 'done' ដើម្បីបញ្ចប់): ")
    if item == "done":
        break
    qty = int(input(f"ចំនួន {item}: "))
    cart[item] = cart.get(item, 0) + qty

print("\nសរុបក្នុងកន្ត្រក៖")
for name, qty in cart.items():
    print(f"- {name}: {qty}")

លទ្ធផល (ឧទាហរណ៍)៖

សរុបក្នុងកន្ត្រក៖
- ស្វាយ: 3
- ត្រសក់: 2

❖ 7. មុខងារ (Functions)

7.1 ហេតុអ្វីត្រូវប្រើ Function? រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

Function ជួយកុំឲ្យសរសេរកូដដដែលៗច្រើនដង។ សរសេរតែម្តង ហៅប្រើបានច្រើនកន្លែង។ វាក៏ធ្វើឲ្យកូដងាយអានជាង ព្រោះឈ្មោះ Function ខ្លួនឯងអាចពន្យល់ថាកូដផ្នែកនោះធ្វើអ្វី។

def convert_to_riel(usd, rate=4100):
    return usd * rate

print(convert_to_riel(5))
print(convert_to_riel(5, 4050))

លទ្ធផល៖

20500
20250

7.2 Local Scope vs Global Scope រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

discount_rate = 0.1  # global

def apply_discount(price):
    final_price = price - (price * discount_rate)  # អាចអានឃើញ global
    return final_price

print(apply_discount(100))
សំខាន់! អថេរដែលបង្កើតនៅក្នុង Function (local) មិនអាចហៅប្រើនៅខាងក្រៅបានទេ។ វានឹងបាត់ភ្លាមពេល Function បញ្ចប់ការងារ។

7.3 ការអនុវត្តជាក់ស្តែង៖ ម៉ាស៊ីនគិតលេខសាមញ្ញ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

def calculate(a, b, operator):
    if operator == "+":
        return a + b
    elif operator == "-":
        return a - b
    elif operator == "*":
        return a * b
    elif operator == "/":
        if b == 0:
            return "មិនអាចចែកនឹង 0 បានទេ"
        return a / b
    else:
        return "សញ្ញាមិនត្រឹមត្រូវ"

print(calculate(8, 2, "*"))
print(calculate(8, 0, "/"))

លទ្ធផល៖

16
មិនអាចចែកនឹង 0 បានទេ

❖ 8. ការងារជាមួយ String និង File

8.1 String Methods ដែលប្រើញឹកញាប់ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

Methodការប្រើប្រាស់
.strip()លុបចន្លោះទទេនៅដើម/ចុងអត្ថបទ
.split()បំបែកអត្ថបទទៅជាបញ្ជីតាមសញ្ញាកំណត់
.join()ផ្ទុយពី split៖ ភ្ជាប់បញ្ជីទៅជាអត្ថបទតែមួយ
.lower() / .upper()ប្តូរទៅជាអក្សរតូច/ធំទាំងអស់
sentence = "  Python   ជា   ភាសា   ល្អ  "
words = sentence.strip().split()
clean_sentence = " ".join(words)

print(clean_sentence)

លទ្ធផល៖ Python ជា ភាសា ល្អ

8.2 ការសរសេរ និងអានឯកសារ (File I/O) រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

# សរសេរបញ្ជីទៅឯកសារ
with open("notes.txt", "w", encoding="utf-8") as f:
    f.write("ថ្ងៃនេះរៀន Python\n")
    f.write("ស្អែករៀនអំពី File Handling\n")

# អានមកវិញ
with open("notes.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

លទ្ធផល៖

ថ្ងៃនេះរៀន Python
ស្អែករៀនអំពី File Handling

8.3 ការអនុវត្តជាក់ស្តែង៖ កម្មវិធីរាប់ពាក្យក្នុងឯកសារ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

with open("notes.txt", "r", encoding="utf-8") as f:
    content = f.read()

words = content.split()
word_count = len(words)
unique_words = len(set(words))

print(f"ចំនួនពាក្យសរុប: {word_count}")
print(f"ចំនួនពាក្យមិនស្ទួន: {unique_words}")

❖ 9. ការសរសេរកម្មវិធីតម្រង់ទិសវត្ថុ (OOP) ជាមូលដ្ឋាន

9.1 Class និង Objectដែលគំរូ vs វត្ថុពិត រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

Class ដូចជា "គំរូគំនូសបញ្ជូន" (blueprint) ចំណែក Object ជាវត្ថុពិតដែលបង្កើតចេញពីគំរូនោះ។ ឧទាហរណ៍ Class Book ជាគំរូទូទៅរបស់សៀវភៅ ចំណែក Object នីមួយៗគឺជាសៀវភៅជាក់លាក់នីមួយៗ។

class Book:
    def __init__(self, title, author, available=True):
        self.title = title
        self.author = author
        self.available = available

    def borrow(self):
        if self.available:
            self.available = False
            print(f"'{self.title}' ត្រូវបានខ្ចីរួចរាល់")
        else:
            print(f"'{self.title}' មិនទាន់អាចខ្ចីបានទេ")

book1 = Book("ប្រវត្តិសាស្ត្រខ្មែរ", "លោក សុខ")
book1.borrow()
book1.borrow()

លទ្ធផល៖

'ប្រវត្តិសាស្ត្រខ្មែរ' ត្រូវបានខ្ចីរួចរាល់
'ប្រវត្តិសាស្ត្រខ្មែរ' មិនទាន់អាចខ្ចីបានទេ

9.2 Inheritanceដែលការបន្តលក្ខណៈពី Class មេ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

class EBook(Book):
    def __init__(self, title, author, file_size_mb):
        super().__init__(title, author)
        self.file_size_mb = file_size_mb

    def download(self):
        print(f"កំពុងទាញយក '{self.title}' ({self.file_size_mb}MB)")

ebook = EBook("Python ដំបូង", "លោក ដារា", 12)
ebook.download()
ebook.borrow()

លទ្ធផល៖

កំពុងទាញយក 'Python ដំបូង' (12MB)
'Python ដំបូង' ត្រូវបានខ្ចីរួចរាល់

9.3 ការអនុវត្តជាក់ស្តែង៖ ប្រព័ន្ធគ្រប់គ្រងបណ្ណាល័យតូច រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        self.books.append(book)

    def show_available(self):
        for book in self.books:
            status = "នៅមាន" if book.available else "ត្រូវបានខ្ចីរួច"
            print(f"- {book.title} ({status})")

library = Library()
library.add_book(Book("ភាសាខ្មែរ", "គណៈកម្មការភាសា"))
library.add_book(Book("គណិតវិទ្យា", "លោក វិចិត្រ"))
library.books[0].borrow()

library.show_available()

លទ្ធផល៖

- ភាសាខ្មែរ (ត្រូវបានខ្ចីរួច)
- គណិតវិទ្យា (នៅមាន)

❖ 10. ការគ្រប់គ្រងកំហុស និងជំហានបន្ទាប់

10.1 try / exceptដែលការពារកម្មវិធីពីការគាំង រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

try:
    number = int(input("បញ្ចូលលេខអាយុ: "))
    print(f"ក្នុងរយៈពេល 10 ឆ្នាំទៀត អ្នកនឹងមានអាយុ {number + 10}")
except ValueError:
    print("សូមបញ្ចូលជាលេខ មិនមែនអក្សរទេ!")

10.2 ម៉ូឌុលខ្លីៗដែលគួរស្គាល់ រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

Moduleការប្រើប្រាស់ខ្លីៗ
randomបង្កើតលេខចៃដន្យ ឬជ្រើសរើសធាតុចៃដន្យពីបញ្ជី
datetimeទាញយកកាលបរិច្ឆេទ និងពេលវេលាបច្ចុប្បន្ន
osពិនិត្យ ឬបង្កើត Folder/File នៅលើប្រព័ន្ធ
from datetime import datetime
now = datetime.now()
print(f"ពេលនេះជាថ្ងៃទី {now.day} ខែ {now.month} ឆ្នាំ {now.year}")

10.3 ជំហានបន្ទាប់ដែលសិក្សាបន្តទៅជំនាញណា រៀបរៀងដោយ: លោក អ៊ុតថា សៀវអុី

បន្ទាប់ពីមានមូលដ្ឋានរឹងមាំហើយ អ្នកអាចជ្រើសរើសផ្លូវសិក្សាបន្តទៅតាមចំណាប់អារម្មណ៍៖

ចំណាប់អារម្មណ៍គួរសិក្សាបន្ត
ចង់សាងសង់គេហទំព័រFlask ឬ Django (Web Framework)
ចង់វិភាគទិន្នន័យPandas, NumPy
ចង់ធ្វើ Automation/ScriptFile handling, os, schedule
ចង់សិក្សា AI/Machine LearningScikit-learn, TensorFlow

លំហាត់អនុវត្ត

  1. សរសេរកម្មវិធីគណនា BMI (មេរៀនទី៣) ឲ្យបន្ថែមលក្ខខណ្ឌប្រាប់ថាតើលទ្ធផលស្ថិតក្នុងកម្រិត "ស្គម", "ធម្មតា", ឬ "លើសទម្ងន់"។
  2. ធ្វើឲ្យល្បែងទាយលេខ (មេរៀនទី៥) កំណត់ចំនួនដងទាយអតិបរមាត្រឹម ៥ ដងតែប៉ុណ្ណោះ។
  3. បន្ថែមមុខងារលុបទំនិញចេញពីកន្ត្រក ក្នុងកម្មវិធីទិញឥវ៉ាន់ (មេរៀនទី៦)។
  4. បន្ថែម Class Member ទៅកម្មវិធីបណ្ណាល័យ (មេរៀនទី៩) ដើម្បីតាមដានថានរណាកំពុងខ្ចីសៀវភៅមួយណា។