🧩
Hàm (Function)
Chapter 8 — Chương Cuối
Hàm (Function)
& Dự Án Tổng Kết
Học cách đóng gói code thành hàm tái sử dụng — rồi kết hợp tất cả kiến thức để xây dựng dự án hoàn chỉnh!
Phần 1 — Hàm là gì?
Hàm — Đóng gói code để dùng lại nhiều lần!
Hãy tưởng tượng bạn phải tính điểm trung bình ở 10 chỗ khác nhau trong chương trình. Thay vì viết lại 10 lần — hãy đóng gói thành một hàm, gọi bao nhiêu lần cũng được!
🍕
Hàm = Công thức làm bánh pizza
Bạn viết công thức một lần. Mỗi khi muốn làm pizza, chỉ cần "gọi công thức" và điền nguyên liệu (tham số) vào. Không cần viết lại từ đầu mỗi lần!
Tham số
(Input)
→
Hàm xử lý
(def name)
→
Kết quả
(return)
# Không có hàm — lặp đi lặp lại 😫 tb1 = (8 + 9 + 7) / 3 tb2 = (6 + 10 + 8) / 3 # ... còn nhiều lần nữa 😩 # Có hàm — gọn gàng và tái sử dụng ✨ def trung_binh(a, b, c): return (a + b + c) / 3 tb1 = trung_binh(8, 9, 7) tb2 = trung_binh(6, 10, 8) print(tb1, tb2)
8.0 8.0
Phần 2 — Cú pháp hàm
Giải phẫu một hàm Python
Hãy nhìn kỹ từng thành phần của một hàm hoàn chỉnh:
def chao_hoi(ten, tuoi): """Hàm này in lời chào thân thiện""" loi_chao = f"Xin chào {ten}, {tuoi} tuổi!" return loi_chao # Gọi hàm ket_qua = chao_hoi("Nam", 13) print(ket_qua)
def
Từ khóa khai báo hàm — bắt buộc phải có
tên hàm
Đặt tên có ý nghĩa, viết thường, dùng dấu gạch dưới
(tham số)
Dữ liệu đầu vào — có thể có hoặc không
thân hàm
Các lệnh bên trong — thụt lề 4 dấu cách
return
Trả về kết quả — hàm có thể không cần return
Xin chào Nam, 13 tuổi!
4 dạng hàm phổ biến
🔹 Không tham số, không return
Hàm đơn giản nhất — chỉ thực hiện một việc
def chao():\n print("Hello!")
🔸 Có tham số, không return
Nhận dữ liệu vào nhưng không trả kết quả
def chao(ten):\n print(f"Hi {ten}!")
🔷 Không tham số, có return
Tính toán và trả về giá trị cố định
def lay_pi():\n return 3.14159
⭐ Có tham số, có return
Dạng đầy đủ nhất — nhận vào và trả về kết quả
def tinh(a, b):\n return a + b
# Tham số mặc định (default parameter) def gioi_thieu(ten, lop="chưa rõ", truong="chưa rõ"): print(f"Tôi là {ten}, lớp {lop}, trường {truong}") gioi_thieu("Nam") # dùng mặc định gioi_thieu("Lan", "8A") # đè lớp gioi_thieu("An", "9B", "THCS Lê Lợi") # đủ hết
Tôi là Nam, lớp chưa rõ, trường chưa rõ
Tôi là Lan, lớp 8A, trường chưa rõ
Tôi là An, lớp 9B, trường THCS Lê Lợi
Tôi là Lan, lớp 8A, trường chưa rõ
Tôi là An, lớp 9B, trường THCS Lê Lợi
Quy tắc vàng khi viết hàm:
Mỗi hàm chỉ nên làm một việc duy nhất. Nếu hàm làm quá nhiều việc, hãy tách thành nhiều hàm nhỏ hơn. Code sẽ dễ đọc và dễ sửa hơn rất nhiều!
Phần 3 — Hàm trong thực tế
Thư viện hàm học sinh — Dùng đi dùng lại!
# === THƯ VIỆN HÀM HỌC SINH === def xep_loai(diem): """Xếp loại học sinh theo điểm""" if diem >= 8: return "🌟 Giỏi" elif diem >= 6.5: return "✅ Khá" elif diem >= 5: return "📝 Trung bình" else: return "❌ Yếu" def trung_binh(ds_diem): """Tính trung bình từ danh sách điểm""" return sum(ds_diem) / len(ds_diem) def in_the_hoc_sinh(ten, lop, ds_diem): """In thẻ học sinh đẹp""" tb = trung_binh(ds_diem) loai = xep_loai(tb) print(f"{'─'*32}") print(f" 👤 {ten.upper():^28}") print(f" 📚 Lớp: {lop}") print(f" 📊 TB: {tb:.1f} | {loai}") print(f" 📈 Max: {max(ds_diem)} | Min: {min(ds_diem)}") print(f"{'─'*32}") # Gọi hàm in_the_hoc_sinh("Nguyễn Văn Nam", "8A", [8,9,7,10,8.5]) in_the_hoc_sinh("Trần Thị Lan", "8A", [6,7,8,6.5,7])
────────────────────────────────
👤 NGUYỄN VĂN NAM
📚 Lớp: 8A
📊 TB: 8.5 | 🌟 Giỏi
📈 Max: 10 | Min: 7
────────────────────────────────
────────────────────────────────
👤 TRẦN THỊ LAN
📚 Lớp: 8A
📊 TB: 6.9 | ✅ Khá
📈 Max: 8 | Min: 6
────────────────────────────────
👤 NGUYỄN VĂN NAM
📚 Lớp: 8A
📊 TB: 8.5 | 🌟 Giỏi
📈 Max: 10 | Min: 7
────────────────────────────────
────────────────────────────────
👤 TRẦN THỊ LAN
📚 Lớp: 8A
📊 TB: 6.9 | ✅ Khá
📈 Max: 8 | Min: 6
────────────────────────────────
💡 Chú ý cách hàm gọi hàm khác:
in_the_hoc_sinh() gọi cả trung_binh() và xep_loai() bên trong. Đây là cách lập trình viên thực sự xây dựng phần mềm!
Phần 4 — Dự án tổng kết
🏆 Dự án cuối khóa
Hệ thống Quản lý Điểm Lớp học
# ========================================== # HỆ THỐNG QUẢN LÝ ĐIỂM LỚP HỌC # Tổng hợp kiến thức Python cơ bản # ========================================== # --- CÁC HÀM CHỨC NĂNG --- def xep_loai(diem): if diem >= 8: return "Giỏi" elif diem >= 6.5: return "Khá" elif diem >= 5: return "Trung Bình" else: return "Yếu" def them_hoc_sinh(ds): ten = input("Tên học sinh: ") diem = float(input(f"Điểm của {ten}: ")) ds.append({"ten": ten, "diem": diem}) print(f"✅ Đã thêm {ten}!\n") def xem_danh_sach(ds): if not ds: print("⚠️ Danh sách trống!\n"); return print(f"\n{'='*40}") print(f" {'STT':4} {'TÊN':20} {'ĐIỂM':6} {'XẾP LOẠI'}") print(f"{'─'*40}") for i, hs in enumerate(ds, 1): loai = xep_loai(hs["diem"]) print(f" {i:<4} {hs['ten']:<20} {hs['diem']:<6.1f} {loai}") print(f"{'='*40}\n") def thong_ke(ds): if not ds: print("⚠️ Chưa có dữ liệu!\n"); return tat_ca_diem = [hs["diem"] for hs in ds] tb = sum(tat_ca_diem) / len(tat_ca_diem) cao = max(tat_ca_diem) thap = min(tat_ca_diem) print(f"\n📊 THỐNG KÊ LỚP ({len(ds)} học sinh)") print(f" Trung bình : {tb:.1f} — {xep_loai(tb)}") print(f" Cao nhất : {cao}") print(f" Thấp nhất : {thap}\n") # --- VÒNG LẶP CHÍNH (MENU) --- danh_sach = [] print("🏫 QUẢN LÝ ĐIỂM LỚP HỌC\n") while True: print("1. Thêm học sinh") print("2. Xem danh sách") print("3. Thống kê lớp") print("4. Thoát") chon = input("Chọn (1-4): ") if chon == "1": them_hoc_sinh(danh_sach) elif chon == "2": xem_danh_sach(danh_sach) elif chon == "3": thong_ke(danh_sach) elif chon == "4": print("👋 Tạm biệt!"); break else: print("⚠️ Vui lòng chọn 1-4!\n")
🏫 QUẢN LÝ ĐIỂM LỚP HỌC
1. Thêm học sinh
2. Xem danh sách ...
Chọn (1-4): 1
Tên học sinh: Nam Điểm: 8.5
✅ Đã thêm Nam!
========================================
STT TÊN ĐIỂM XẾP LOẠI
────────────────────────────────────────
1 Nam 8.5 Giỏi
========================================
1. Thêm học sinh
2. Xem danh sách ...
Chọn (1-4): 1
Tên học sinh: Nam Điểm: 8.5
✅ Đã thêm Nam!
========================================
STT TÊN ĐIỂM XẾP LOẠI
────────────────────────────────────────
1 Nam 8.5 Giỏi
========================================
Dự án này dùng tất cả kiến thức đã học!
Biến, str, float, input(), if/elif/else, while, for, list, enumerate, hàm def, return — tất cả cùng phối hợp tạo nên một phần mềm thực sự!
Phần 5 — Ôn tập toàn bộ 8 chương
Tổng kết — Những gì bạn đã học!
Ch.0 — Mở đầu
🌐 Ngôn ngữ lập trình
Ngôn ngữ cấp cao, compiled vs interpreted
Nền tảng tư duy
Ch.1 — Khởi đầu
🐍 Python là gì?
Cài đặt, chạy chương trình đầu tiên, print()
print("Hello!")
Ch.2 — Dữ liệu
📦 Biến & Kiểu dữ liệu
int, float, str, bool — type(), quy tắc đặt tên
ten = "Nam"
Ch.3 — Tính toán
🧮 Số & Chuỗi chữ
7 phép toán, methods chuỗi, f-string
f"Xin chào {ten}"
Ch.4 — Tương tác
⌨️ Nhập dữ liệu
input(), int(), float() — chuyển đổi kiểu
int(input("..."))
Ch.5 — Quyết định
🔀 if / elif / else
Điều kiện, thụt lề, and/or/not, toán tử so sánh
if diem >= 8:
Ch.6 — Lặp lại
🔁 Vòng lặp
for, while, range(), break, continue
for i in range(10):
Ch.7 — Danh sách
📋 List
Index, slicing, append/remove/sort, duyệt list
ds = [1, 2, 3]
Bước tiếp theo — Học gì sau Python cơ bản?
Bạn đã có nền tảng vững chắc! Hãy chọn hướng đi phù hợp với đam mê của mình:
📖 Học thêm ở đâu?
python.org/doc (tài liệu chính thức) |
w3schools.com/python (thực hành online) |
CS50P của Harvard (miễn phí!) |
Exercism.io (bài tập theo cấp độ)
🎓 Chứng nhận hoàn thành
Python Cơ Bản
Chúc mừng! Bạn đã hoàn thành toàn bộ khóa học Python cơ bản.
Từ "Hello World" đến xây dựng ứng dụng hoàn chỉnh — bạn đã đi một chặng đường dài! 🎉
Từ "Hello World" đến xây dựng ứng dụng hoàn chỉnh — bạn đã đi một chặng đường dài! 🎉
🐍 Python
📦 Biến & Kiểu DL
🔀 if/else
🔁 Vòng lặp
📋 List
🧩 Hàm
🏆 Kiểm tra cuối khóa!
Câu hỏi tổng hợp — bạn có nhớ hết không?
Từ khóa nào dùng để khai báo hàm?
→ def
→ def
Hàm dùng gì để trả về kết quả?
→ return
→ return
Kể 3 loại vòng lặp kiểm soát:
→ for, while, break, continue
→ for, while, break, continue
Tại sao nên dùng hàm thay vì viết lại code?
→ Tái sử dụng, dễ đọc, dễ sửa
→ Tái sử dụng, dễ đọc, dễ sửa