Bài 26

Hàm trong Python

Biết được chương trình con là hàm, biết cách tạo hàm.

🚀

1. Khởi động (Engagement)

Các chương trình giải những bài toán thực tế phức tạp thường có rất nhiều dòng lệnh, trong đó có không ít những khối lệnh tương ứng với một số thao tác được lặp đi lặp lại nhiều lần ở những vị trí khác nhau. Để đỡ công viết đi viết lại các khối lệnh đó, trong tổ chức chương trình viết bằng ngôn ngữ lập trình bậc cao, người ta thường gom các khối lệnh như vậy thành những chương trình con.

💡 Câu hỏi suy ngẫm: Em có thể kể tên một số hàm trong số các lệnh đã học hay không? Các hàm đó có những đặc điểm chung gì?

Trong Python, các hàm chính là các chương trình con. Khi đó, trong chương trình người ta chỉ cần thay cả khối lệnh bằng một lệnh gọi chương trình con tương ứng.

📖

2. Hình thành kiến thức (Knowledge)

1. Một số hàm thiết kế sẵn của Python

Quan sát một số câu lệnh trong bảng sau và cho biết những câu lệnh này có điểm chung gì:

abs()len()range()bool()float()
list()round()chr()input()ord()
str()divmod()int()print()type()

Điểm chung:

  • Về hình thức, các lệnh trên đều có các dấu mở đóng ngoặc đi sau tên lệnh
  • Bên trong các dấu ngoặc, nói chung, có thể cần ghi thêm các tham số là các đại lượng, các biến hoặc thậm chí cả các biểu thức

Ví dụ:

  • Lệnh print("Thời khoá biểu") thực hiện việc in xâu kí tự "Thời khoá biểu" trong dấu ngoặc ra màn hình
  • Lệnh x = int("52") chuyển xâu "52" thành số nguyên 52
  • Lệnh type(y) trả lại kiểu dữ liệu của biến y

Trong một số trường hợp bên trong dấu ngoặc có thể bỏ trống. Ví dụ, lệnh x = input() thực hiện yêu cầu nhập vào một xâu kí tự bất kì và gán cho biến x.

Các lệnh trên chính là các chương trình con được thiết kế sẵn của Python, cho phép người dùng tuỳ ý sử dụng trong các chương trình của riêng mình.

Trong các ví dụ trên, xâu kí tự bên trong ngoặc của các hàm int() và print() là tham số của hàm.

Cú pháp câu lệnh gọi hàm trong Python:

<tên_hàm>(<tham_số_1>, <tham_số_2>, ...)
Python Script

2. Thiết lập các hàm tự định nghĩa

Ngoài các hàm thiết kế sẵn, Python còn cho phép người dùng tự thiết lập các hàm của riêng mình (còn gọi là các hàm tự định nghĩa).

a) Cú pháp định nghĩa hàm

Hàm trong Python được định nghĩa bằng từ khoá def, theo sau là tên hàm (tên hàm sẽ theo quy tắc đặt tên định danh). Hàm có thể có hoặc không có tham số. Khối lệnh mô tả hàm được viết sau dấu ":" và viết lùi vào, thẳng hàng. Hàm có thể có hoặc không có giá trị trả lại sau từ khoá return.

Cú pháp thiết lập hàm có trả lại giá trị:

def <tên_hàm>(<danh_sách_tham_số>):
    <khối_lệnh>
    return <giá_trị_trả_về>
Python Script

Cần có lệnh return <giá_trị_trả_về>. Hàm sẽ kết thúc khi gặp lệnh return.

b) Ví dụ về hàm

Ví dụ 1: Hàm có trả lại giá trị

def inc(n):
    return n + 1

inc(3)    # 4
Python Script

Ví dụ 2: Hàm không trả lại giá trị

def thong_bao(msg):
    print("Xin chào bạn", msg)
    return

thong_bao("Trần Quang Minh")
# Xin chào bạn Trần Quang Minh
Python Script

3. Mô tả tham số và giá trị trả lại của các hàm

float(): Chuyển đổi tham số thành số thực

  • Tham số: số hoặc xâu có thể chuyển thành số thực
  • Giá trị trả lại: số thực tương ứng

str(): Chuyển đổi tham số thành xâu kí tự

  • Tham số: bất kỳ đối tượng nào
  • Giá trị trả lại: xâu kí tự biểu diễn đối tượng đó

len(): Tính độ dài của đối tượng

  • Tham số: xâu, danh sách, tuple...
  • Giá trị trả lại: số nguyên là độ dài

list(): Chuyển đổi thành danh sách

  • Tham số: đối tượng có thể lặp được
  • Giá trị trả lại: danh sách các phần tử
🧩

3. Luyện tập (Practice)

Bài tập thực hành

Bài tập 1:

Mô tả tham số và giá trị trả lại của mỗi hàm sau:

  • float()
  • str()
  • len()
  • list()

Bài tập 2:

Viết hàm tinh_tong(a, b) trả về tổng hai số a và b.

Gợi ý:

def tinh_tong(a, b):
    return a + b

# Gọi hàm
ket_qua = tinh_tong(5, 3)
print(ket_qua)  # 8
Python Script

Bài tập 3:

Viết hàm in_thong_bao(tin_nhan) không trả về giá trị, chỉ in ra thông báo.

Gợi ý:

def in_thong_bao(tin_nhan):
    print("Thông báo:", tin_nhan)
    return

# Gọi hàm
in_thong_bao("Chào mừng bạn đến với Python!")
Python Script

Bài tập 4:

Viết hàm kiem_tra_chan_le(n) trả về "Chẵn" nếu n là số chẵn, "Lẻ" nếu n là số lẻ.

Gợi ý:

def kiem_tra_chan_le(n):
    if n % 2 == 0:
        return "Chẵn"
    else:
        return "Lẻ"

# Gọi hàm
print(kiem_tra_chan_le(10))  # Chẵn
print(kiem_tra_chan_le(7))   # Lẻ
Python Script

Thực hành tại máy:

Viết chương trình sử dụng các hàm đã viết ở trên để giải bài toán:

  • Nhập hai số, tính tổng bằng hàm tinh_tong()
  • Kiểm tra kết quả là chẵn hay lẻ bằng hàm kiem_tra_chan_le()
  • In thông báo kết quả bằng hàm in_thong_bao()
🌟

4. Vận dụng (Application)

Bài tập vận dụng

Bài tập 1: Hàm tính diện tích hình tròn

Viết hàm dien_tich_hinh_tron(ban_kinh) tính và trả về diện tích hình tròn với công thức S = π × r².

Gợi ý:

import math

def dien_tich_hinh_tron(ban_kinh):
    return math.pi * ban_kinh ** 2

# Sử dụng hàm
r = float(input("Nhập bán kính: "))
dt = dien_tich_hinh_tron(r)
print("Diện tích hình tròn:", dt)
Python Script

Bài tập 2: Hàm kiểm tra số nguyên tố

Viết hàm la_so_nguyen_to(n) trả về True nếu n là số nguyên tố, False nếu không phải.

Gợi ý:

def la_so_nguyen_to(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

# Sử dụng hàm
so = int(input("Nhập số: "))
if la_so_nguyen_to(so):
    print(so, "là số nguyên tố")
else:
    print(so, "không phải là số nguyên tố")
Python Script

Bài tập 3: Hàm đổi nhiệt độ

Viết hàm doi_do_C_sang_F(do_C) chuyển đổi từ độ C sang độ F theo công thức: F = (C × 9/5) + 32.

Gợi ý:

def doi_do_C_sang_F(do_C):
    return (do_C * 9/5) + 32

# Sử dụng hàm
C = float(input("Nhập nhiệt độ (°C): "))
F = doi_do_C_sang_F(C)
print(f"{C}°C = {F}°F")
Python Script

Thảo luận:

  • Lợi ích của việc sử dụng hàm trong lập trình là gì?
  • Khi nào nên viết hàm có trả về giá trị, khi nào nên viết hàm không trả về giá trị?
  • Tại sao nên đặt tên hàm có ý nghĩa rõ ràng?

Ghi nhớ kiến thức 🎯

  • ✅ def là từ khóa định nghĩa hàm trong Python.
  • ✅ Hàm có thể có hoặc không có tham số.
  • ✅ return dùng để trả về giá trị từ hàm.
  • ✅ Hàm không có return thì trả về None.
  • ✅ Hàm giúp tái sử dụng mã và làm chương trình gọn gàng hơn.
  • ✅ Tên hàm nên có ý nghĩa và tuân theo quy tắc đặt tên.

Chúc mừng bạn đã hoàn thành bài học này! 🏆