Skip to content

🔧 14.1 Khái niệm function cơ bản

📖 Giới thiệu

Function (hàm) là khối code được đặt tên để thực hiện một công việc cụ thể. Thay vì viết lại code nhiều lần, ta có thể tạo function để sử dụng lại, giúp code gọn gàng và dễ bảo trì hơn.

Mục tiêu bài học:

  • Hiểu khái niệm và lợi ích của function
  • Biết cách tạo và gọi function đơn giản
  • Sử dụng function để tổ chức code tốt hơn

🔧 Cú pháp

Định nghĩa function:

python
def ten_ham():
    # Code thực hiện công việc
    print("Hello World")

# Gọi function
ten_ham()

Function có tham số:

python
def chao(ten):
    print(f"Xin chào {ten}!")

chao("An")  # Gọi với tham số

Function có return:

python
def cong(a, b):
    ket_qua = a + b
    return ket_qua

tong = cong(3, 5)  # tong = 8

🔬 Phân tích & Giải thích chi tiết

1. 📋 Function không tham số

python
def chao_hoi():
    print("Xin chào!")
    print("Chúc bạn học tốt!")

# Gọi function
chao_hoi()
chao_hoi()  # Có thể gọi nhiều lần

2. 📥 Function có tham số

python
def gioi_thieu(ten, tuoi):
    print(f"Tôi tên {ten}")
    print(f"Tôi {tuoi} tuổi")

# Gọi với các giá trị khác nhau
gioi_thieu("An", 16)
gioi_thieu("Bình", 17)

3. 📤 Function có return

python
def tinh_diem_tb(toan, van):
    tong = toan + van
    trung_binh = tong / 2
    return trung_binh

# Sử dụng kết quả trả về
diem_an = tinh_diem_tb(8, 7)
diem_binh = tinh_diem_tb(9, 6)

print(f"Điểm TB của An: {diem_an}")
print(f"Điểm TB của Bình: {diem_binh}")

💻 Ví dụ minh họa

Ví dụ 1: Calculator đơn giản

python
def cong(a, b):
    """Cộng hai số"""
    return a + b

def tru(a, b):
    """Trừ hai số"""
    return a - b

def nhan(a, b):
    """Nhân hai số"""
    return a * b

def chia(a, b):
    """Chia hai số"""
    if b != 0:
        return a / b
    else:
        return "Lỗi: Không chia được cho 0"

print("🧮 CALCULATOR ĐƠN GIẢN")
print("=" * 25)

# Test các phép tính
so1 = 10
so2 = 3

print(f"{so1} + {so2} = {cong(so1, so2)}")
print(f"{so1} - {so2} = {tru(so1, so2)}")
print(f"{so1} × {so2} = {nhan(so1, so2)}")
print(f"{so1} ÷ {so2} = {chia(so1, so2):.2f}")

# Test chia cho 0
print(f"{so1} ÷ 0 = {chia(so1, 0)}")

Ví dụ 2: Xử lý chuỗi

python
def dem_ky_tu(chuoi):
    """Đếm số ký tự trong chuỗi"""
    return len(chuoi)

def in_hoa(chuoi):
    """Chuyển thành chữ hoa"""
    return chuoi.upper()

def in_thuong(chuoi):
    """Chuyển thành chữ thường"""
    return chuoi.lower()

def dao_nguoc(chuoi):
    """Đảo ngược chuỗi"""
    return chuoi[::-1]

print("📝 XỬ LÝ CHUỖI")
print("=" * 20)

ten = "Python"

print(f"Chuỗi gốc: {ten}")
print(f"Số ký tự: {dem_ky_tu(ten)}")
print(f"Chữ hoa: {in_hoa(ten)}")
print(f"Chữ thường: {in_thuong(ten)}")
print(f"Đảo ngược: {dao_nguoc(ten)}")

# Kết hợp nhiều function
chuoi_xu_ly = in_hoa(dao_nguoc(ten))
print(f"Đảo ngược + in hoa: {chuoi_xu_ly}")

Ví dụ 3: Quản lý điểm số

python
def nhap_diem():
    """Nhập điểm từ bàn phím"""
    toan = float(input("Điểm Toán: "))
    van = float(input("Điểm Văn: "))
    anh = float(input("Điểm Anh: "))
    return toan, van, anh

def tinh_diem_tb(toan, van, anh):
    """Tính điểm trung bình"""
    return (toan + van + anh) / 3

def xep_loai(diem_tb):
    """Xếp loại học lực"""
    if diem_tb >= 8:
        return "Giỏi"
    elif diem_tb >= 6.5:
        return "Khá"
    elif diem_tb >= 5:
        return "Trung bình"
    else:
        return "Yếu"

def hien_thi_ket_qua(ten, toan, van, anh, tb, loai):
    """Hiển thị kết quả"""
    print(f"\n📊 KẾT QUẢ HỌC TẬP")
    print("-" * 20)
    print(f"Học sinh: {ten}")
    print(f"Điểm Toán: {toan}")
    print(f"Điểm Văn: {van}")
    print(f"Điểm Anh: {anh}")
    print(f"Điểm TB: {tb:.1f}")
    print(f"Xếp loại: {loai}")

# Chương trình chính
print("📚 QUẢN LÝ ĐIỂM SỐ")
print("=" * 25)

ten_hs = input("Tên học sinh: ")
toan, van, anh = nhap_diem()

diem_tb = tinh_diem_tb(toan, van, anh)
hoc_luc = xep_loai(diem_tb)

hien_thi_ket_qua(ten_hs, toan, van, anh, diem_tb, hoc_luc)

🏋️ Thực hành

Bài tập 1: Function chào hỏi

python
def chao(ten):
    print(f"Xin chào {ten}!")

chao("Minh")
chao("Lan")

Bài tập 2: Tính diện tích

python
def dien_tich_hinh_vuong(canh):
    return canh * canh

def dien_tich_hinh_chu_nhat(dai, rong):
    return dai * rong

# Test
print(f"Hình vuông cạnh 5: {dien_tich_hinh_vuong(5)}")
print(f"HCN 4x6: {dien_tich_hinh_chu_nhat(4, 6)}")

Bài tập 3: Kiểm tra số chẵn lẻ

python
def kiem_tra_chan_le(so):
    if so % 2 == 0:
        return "chẵn"
    else:
        return "lẻ"

# Test
for i in [1, 2, 3, 4, 5]:
    loai = kiem_tra_chan_le(i)
    print(f"Số {i} là số {loai}")

📋 Tóm tắt

Cấu trúc function:

python
def ten_function(tham_so):
    """Mô tả function"""
    # Code xử lý
    return ket_qua  # (tuỳ chọn)

Lợi ích của function:

  1. 🔄 Tái sử dụng: Viết 1 lần, dùng nhiều lần
  2. 🧹 Code sạch: Tách biệt các chức năng
  3. 🐛 Dễ debug: Tìm lỗi nhanh hơn
  4. 👥 Làm nhóm: Chia task dễ dàng

Các loại function:

LoạiVí dụMục đích
Không tham sốdef chao():Thực hiện công việc cố định
Có tham sốdef chao(ten):Xử lý dữ liệu đầu vào
Có returndef cong(a,b):Trả về kết quả

Quy tắc đặt tên:

  1. Dùng động từ: tinh_tong, hien_thi
  2. Rõ ràng: tinh_diem_tb thay vì tinh
  3. Snake_case: ten_function không tenFunction
  4. Không dùng từ khóa: Tránh def, if, for...

Lưu ý quan trọng:

  1. Định nghĩa trước khi gọi: Function phải được def trước
  2. Indentation: Code trong function phải thụt vào
  3. return: Không bắt buộc, default là None
  4. Docstring: Mô tả function bằng """..."""

Chuẩn bị cho bài tiếp theo:

Bài tiếp theo sẽ học về 📥📤 Tham số và return nâng cao!


💡 Mẹo: Chia nhỏ bài toán thành các function đơn giản!

🔧 Thực hành: Thử viết function tính tuổi từ năm sinh!

🐍 Khóa học Python căn bản bằng tiếng Việt