Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
- I. Lý thuyết trọng tâm
- 1. Hàm thiết kế sẵn của Python
- 2. Thiết lập hàm tự định nghĩa
- II. Phương pháp giải các dạng bài tập
- Dạng 1: Phân tích hàm — xác định tên, tham số, giá trị trả lại, chức năng
- Dạng 2: Viết hàm không trả giá trị (thực hiện hành động)
- Dạng 3: Viết hàm có trả giá trị (tính toán, kiểm tra)
- Dạng 4: Viết hàm kết hợp gọi hàm khác
- Dạng 5: Viết hàm xử lí xâu kí tự
- III. Hướng dẫn thực hành
- Nhiệm vụ 1: Hàm chào — không tham số, không trả giá trị
- Nhiệm vụ 2: Hàm kiểm tra số nguyên tố — có tham số, trả giá trị
- IV. Sơ đồ tư duy
- V. Sai lầm thường gặp
I. Lý thuyết trọng tâm
1. Hàm thiết kế sẵn của Python
a) Chương trình con là gì?
Khi giải các bài toán phức tạp, chương trình thường có những khối lệnh thực hiện cùng một thao tác nhưng xuất hiện ở nhiều vị trí khác nhau. Thay vì viết lại các khối lệnh đó nhiều lần, ta gom chúng thành chương trình con — chỉ cần viết một lần, sau đó gọi lại bất cứ khi nào cần. Trong Python, chương trình con chính là hàm (function).
b) Hàm thiết kế sẵn (built-in)
Python cung cấp sẵn nhiều hàm để người dùng tùy ý sử dụng mà không cần tự viết:
| abs() | len() | range() | bool() | float() |
|---|---|---|---|---|
| list() | round() | chr() | input() | ord() |
| str() | divmod() | int() | print() | type() |
Đặc điểm chung: Tất cả đều có tên hàm theo sau bởi cặp ngoặc đơn (). Bên trong ngoặc có thể chứa tham số (dữ liệu đầu vào) hoặc để trống.
c) Cú pháp gọi hàm
<tên_hàm>(<danh_sách_tham_số>)
Ví dụ:
print("Thời khoá biểu") # tham số: xâu "Thời khoá biểu" → in ra màn hình
x = int("52") # tham số: xâu "52" → trả về số nguyên 52
type(y) # tham số: biến y → trả về kiểu dữ liệu của y
x = input() # không tham số → nhập xâu từ bàn phím
Câu hỏi kiểm tra nhanh: Mô tả tham số và giá trị trả lại của các hàm sau:
| Hàm | Tham số | Giá trị trả lại |
|---|---|---|
float(x) |
Số hoặc xâu biểu diễn số | Số thực tương ứng. Ví dụ: float("3") → 3.0 |
str(x) |
Giá trị bất kì | Xâu kí tự biểu diễn giá trị đó. Ví dụ: str(52) → "52" |
len(x) |
Danh sách hoặc xâu | Số nguyên — số phần tử (hoặc số kí tự). Ví dụ: len("abc") → 3 |
list(x) |
Đối tượng có thể lặp (xâu, range…) | Danh sách. Ví dụ: list("abc") → ['a', 'b', 'c'] |
2. Thiết lập hàm tự định nghĩa
Ngoài hàm có sẵn, Python cho phép người dùng tự tạo hàm bằng từ khóa def.
a) Cú pháp chung
def <tên_hàm>(<tham_số>):
<khối_lệnh>
return <giá_trị> # nếu hàm có trả giá trị
Các thành phần:
| Thành phần | Ý nghĩa |
|---|---|
def |
Từ khóa bắt buộc để khai báo hàm |
<tên_hàm> |
Đặt theo quy tắc định danh (chữ cái, số, _, không bắt đầu bằng số) |
<tham_số> |
Dữ liệu đầu vào. Có thể có hoặc không có tham số |
: |
Dấu hai chấm bắt buộc sau khai báo |
<khối_lệnh> |
Viết lùi vào (thụt đầu dòng), thẳng hàng |
return |
Trả giá trị và kết thúc hàm. Có thể có hoặc không |
b) Hai loại hàm
Loại 1 — Hàm có trả lại giá trị:
def inc(n):
return n + 1
- Tên hàm:
inc. Tham số:n. Giá trị trả lại:n + 1. - Gọi:
inc(3)→ trả về4. - Câu lệnh
return <giá_trị>là bắt buộc để trả kết quả.
Loại 2 — Hàm không trả lại giá trị:
def thong_bao(msg):
print("Xin chào bạn", msg)
return
- Tên hàm:
thong_bao. Tham số:msg. Giá trị trả lại: không có. - Gọi:
thong_bao("Trần Quang Minh")→ in raXin chào bạn Trần Quang Minh. - Lệnh
returnkhông kèm giá trị, hoặc có thể bỏ luônreturn.
Ghi nhớ: Hàm trả giá trị cần
return <giá_trị>. Hàm không trả giá trị có thể dùngreturnkhông kèm giá trị, hoặc không cầnreturn.
c) Hàm có thể có nhiều lệnh return
Hàm không bắt buộc chỉ có một return duy nhất. Khi gặp bất kì lệnh return nào, hàm dừng ngay lập tức và trả về giá trị tương ứng.
def prime(n):
if n < 2:
return False # dừng ngay nếu n < 2
C = 0
k = 2
while k < n:
if n % k == 0:
return False # dừng ngay khi tìm thấy ước
k = k + 1
return True # chạy đến đây nghĩa là không có ước → nguyên tố
Cách viết này hiệu quả hơn vì dừng sớm ngay khi tìm thấy ước, không cần duyệt hết.
Câu hỏi kiểm tra nhanh: Quan sát hai hàm sau, giải thích cách thiết lập và chức năng:
Hàm a:
def Nhap_xau():
msg = input("Nhập một xâu: ")
return msg
→ Không có tham số. Hàm yêu cầu nhập xâu từ bàn phím, lưu vào msg, rồi trả về xâu vừa nhập. Đây là hàm có trả giá trị.
Hàm b:
def Inday(n):
for k in range(n):
print(k, end=" ")
→ Có tham số n. Hàm in ra các số từ 0 đến n−1 trên cùng một dòng. Không có return nên đây là hàm không trả giá trị.
II. Phương pháp giải các dạng bài tập
Dạng 1: Phân tích hàm — xác định tên, tham số, giá trị trả lại, chức năng
Phương pháp:
Khi gặp một hàm cần phân tích, xác định 4 yếu tố:
| Yếu tố | Cách nhận biết |
|---|---|
| Tên hàm | Từ ngay sau def |
| Tham số | Trong cặp ngoặc (). Nếu rỗng → không có tham số |
| Có trả giá trị? | Có return <giá_trị> → có. Có return trống hoặc không có return → không |
| Chức năng | Đọc khối lệnh bên trong để hiểu hàm làm gì |
Bài tập mẫu: Phân tích hàm inc(n):
def inc(n):
return n + 1
| Yếu tố | Kết quả |
|---|---|
| Tên hàm | inc |
| Tham số | n (một số) |
| Giá trị trả lại | n + 1 |
| Chức năng | Nhận vào một số, trả về số đó cộng thêm 1 |
Dạng 2: Viết hàm không trả giá trị (thực hiện hành động)
Phương pháp:
- Xác định hàm cần làm gì (in, nhập, xử lí…).
- Xác định hàm có tham số không. Nếu dữ liệu lấy từ bên ngoài → cần tham số.
- Viết khối lệnh thực hiện công việc. Không cần
return(hoặcreturntrống). - Sau khi định nghĩa, gọi hàm để chạy.
Bài tập mẫu (SGK – Thực hành, Nhiệm vụ 1): Viết hàm yêu cầu nhập họ tên rồi đưa lời chào ra màn hình.
Lời giải:
def meeting():
ten = input("Nhập họ tên của em: ")
print("Xin chào", ten)
meeting()
Phân tích: Hàm meeting không có tham số (vì dữ liệu nhập trực tiếp từ bàn phím bên trong hàm). Không có return vì chỉ cần in ra, không cần trả giá trị. Dòng meeting() ở cuối là lệnh gọi hàm để thực thi.
Dạng 3: Viết hàm có trả giá trị (tính toán, kiểm tra)
Phương pháp:
- Xác định đầu vào (tham số) và đầu ra (giá trị trả lại).
- Viết thuật toán xử lí bên trong hàm.
- Dùng
return <giá_trị>để trả kết quả. - Có thể có nhiều
returnở các nhánh khác nhau.
Bài tập mẫu (SGK – Thực hành, Nhiệm vụ 2): Viết hàm prime(n) trả lại True nếu n là số nguyên tố, False nếu không.
Lời giải:
def prime(n):
C = 0
k = 1
while k < n:
if n % k == 0:
C = C + 1
k = k + 1
if C == 1:
return True
else:
return False
Giải thích: Biến C đếm số ước thực sự của n (từ 1 đến n−1). Vòng while duyệt k từ 1, mỗi lần tăng 1, dừng khi k = n. Với mỗi k, nếu n % k == 0 (k là ước của n) thì tăng C. Sau vòng lặp, nếu C = 1 (chỉ có ước 1) → n là số nguyên tố → trả True. Ngược lại → trả False.
Ví dụ: prime(7): k=1 (ước, C=1), k=2..6 (không ước) → C=1 → True. prime(6): k=1 (C=1), k=2 (C=2), k=3 (C=3), k=5 (không) → C=3 → False.
Dạng 4: Viết hàm kết hợp gọi hàm khác
Phương pháp:
- Tận dụng hàm đã viết trước đó bằng cách gọi lại trong hàm mới.
- Chia bài toán thành các bước nhỏ, mỗi bước ứng với một hàm.
Bài tập mẫu (SGK – Luyện tập, bài 1): Viết hàm với tham số n in ra các số là ước nguyên tố của n. (Gợi ý: dùng hàm prime()).
Lời giải:
def prime(n):
C = 0
k = 1
while k < n:
if n % k == 0:
C = C + 1
k = k + 1
if C == 1:
return True
else:
return False
def uoc_nguyen_to(n):
for k in range(2, n + 1):
if n % k == 0 and prime(k):
print(k, end=" ")
# Sử dụng
uoc_nguyen_to(12)
# Kết quả: 2 3
Giải thích: Hàm uoc_nguyen_to(n) duyệt k từ 2 đến n. Với mỗi k, kiểm tra hai điều kiện: k là ước của n (n % k == 0) và k là số nguyên tố (prime(k) trả về True). Nếu cả hai thỏa → in k.
Dạng 5: Viết hàm xử lí xâu kí tự
Phương pháp:
- Tham số thường là xâu
s. - Duyệt từng kí tự bằng
for ch in s. - Kiểm tra điều kiện trên từng kí tự, đếm hoặc ghép vào kết quả.
- Trả về kết quả bằng
return.
Bài tập mẫu (SGK – Luyện tập, bài 2): Viết hàm numbers(s) đếm số chữ số có trong xâu s. Ví dụ: numbers("0101abc") = 4.
Lời giải:
def numbers(s):
dem = 0
for ch in s:
if "0" <= ch <= "9":
dem = dem + 1
return dem
# Sử dụng
print(numbers("0101abc")) # Kết quả: 4
Giải thích: Duyệt từng kí tự ch trong xâu s. Nếu ch nằm trong khoảng "0" đến "9" (là chữ số) → tăng biến đếm. Cuối cùng trả về số lượng chữ số đã đếm.
III. Hướng dẫn thực hành
Nhiệm vụ 1: Hàm chào — không tham số, không trả giá trị
Đề bài: Viết hàm yêu cầu nhập họ tên rồi đưa lời chào ra màn hình.
def meeting():
ten = input("Nhập họ tên của em: ")
print("Xin chào", ten)
meeting()
Giải thích: Hàm meeting() không có tham số, không trả giá trị. Toàn bộ logic (nhập tên, in chào) nằm bên trong hàm. Dòng cuối meeting() gọi hàm để thực thi.
Nhiệm vụ 2: Hàm kiểm tra số nguyên tố — có tham số, trả giá trị
Đề bài: Viết hàm prime(n) trả lại True nếu n là số nguyên tố, False nếu không.
def prime(n):
C = 0
k = 1
while k < n:
if n % k == 0:
C = C + 1
k = k + 1
if C == 1:
return True
else:
return False
# Kiểm tra
print(prime(7)) # True
print(prime(10)) # False
print(prime(1)) # False (C = 0, không bằng 1)
Giải thích: Đếm số ước thực sự (từ 1 đến n−1) vào biến C. Số nguyên tố chỉ có đúng 1 ước thực sự (số 1), nên kiểm tra C == 1. Với n = 1: không có ước nào trong khoảng [1, 0) → C = 0 → False. Với n = 0 hoặc âm: tương tự C = 0 → False.
IV. Sơ đồ tư duy
1. Hàm thiết kế sẵn (built-in)
- 1.1. Là chương trình con có sẵn trong Python
- 1.2. Cú pháp gọi:
<tên_hàm>(<tham_số>) - 1.3. Ví dụ:
print(),int(),len(),input(),type(),abs()… - 1.4. Tham số: dữ liệu đầu vào, có thể có hoặc không
2. Hàm tự định nghĩa
- 2.1. Dùng từ khóa
defđể khai báo - 2.2. Tên hàm theo quy tắc định danh
- 2.3. Khối lệnh viết sau dấu
:, thụt đầu dòng, thẳng hàng - 2.4. Tham số: có thể có hoặc không
3. Hai loại hàm tự định nghĩa
- 3.1. Hàm có trả giá trị:
return <giá_trị>— bắt buộc - 3.2. Hàm không trả giá trị:
returntrống hoặc không cầnreturn - 3.3. Hàm kết thúc ngay khi gặp
return - 3.4. Có thể có nhiều
returnở các nhánh khác nhau
4. Ứng dụng
- 4.1. Tránh viết lặp lại code
- 4.2. Chia bài toán phức tạp thành nhiều hàm nhỏ
- 4.3. Gọi hàm đã viết bên trong hàm khác
V. Sai lầm thường gặp
| Sai lầm | Đính chính |
|---|---|
Quên dấu : sau khai báo def tên_hàm() |
Thiếu dấu hai chấm sẽ gây lỗi cú pháp (SyntaxError). Luôn nhớ: def tên_hàm(): phải có : ở cuối. |
| Không thụt đầu dòng cho khối lệnh bên trong hàm | Python dùng thụt đầu dòng (indentation) để xác định khối lệnh thuộc hàm. Nếu không thụt → lỗi IndentationError hoặc lệnh nằm ngoài hàm. |
Chỉ viết def mà không gọi hàm |
Khai báo hàm chỉ là định nghĩa, chưa chạy. Phải có dòng gọi hàm (ví dụ meeting()) ở bên ngoài thì hàm mới thực thi. |
Dùng print() thay cho return khi cần trả giá trị |
print() chỉ in ra màn hình, không trả giá trị cho lệnh gọi. Nếu cần dùng kết quả của hàm (gán vào biến, dùng trong biểu thức), phải dùng return. Ví dụ: x = inc(3) cần return n+1, nếu dùng print thì x sẽ là None. |
Viết lệnh sau return và mong nó chạy |
Hàm dừng ngay khi gặp return. Mọi lệnh viết phía sau return (cùng cấp) sẽ không bao giờ được thực thi. |
Hàm prime(1) trả về True |
False. Số 1 không phải số nguyên tố. Trong hàm prime(n) ở SGK: khi n=1, vòng while k < 1 không chạy lần nào → C = 0 ≠ 1 → trả False. |

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa
