BÀI 26 - HÀM TRONG PYTHON

Hàm trong Python
Slide 1/12
⚡🐍

HÀM TRONG PYTHON

"Tìm hiểu về chương trình con và cách tạo hàm"

Tin học 10 | Lập trình nâng cao
Slide 2/12

🎯 SAU BÀI NÀY EM SẼ

  • Biết được chương trình con là hàm

    Hiểu khái niệm và vai trò của hàm trong lập trình Python.

  • Biết cách tạo hàm

    Nắm vững cú pháp và kỹ thuật định nghĩa hàm tự tạo trong Python.

🤔 Tại sao cần có hàm?

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.

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.

💭 Câu hỏi:

❓ 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ì?

✅ ĐÁP ÁN

📌 Câu 1: Kể tên một số hàm đã học

Có thể kể tên một số hàm như:

print() - In dữ liệu ra màn hình
input() - Nhận dữ liệu từ bàn phím
int() - Chuyển đổi sang số nguyên
float() - Chuyển đổi sang số thực
str() - Chuyển đổi sang chuỗi
len() - Tính độ dài
type() - Xác định kiểu dữ liệu
range() - Tạo dãy số
abs() - Tính giá trị tuyệt đối
round() - Làm tròn số

📌 Câu 2: Đặc điểm chung của các hàm

🔹 1. Về hình thức:

Đều có dấu ngoặc đơn () đi sau tên hàm
Ví dụ: print(), len(), int()

🔹 2. Về tham số:

Bên trong dấu ngoặc có thể có hoặc không có tham số
Tham số có thể là: số, chuỗi, biến, hoặc biểu thức
• len("Hello") → tham số là chuỗi
• int(x) → tham số là biến
• print() → không có tham số

🔹 3. Về chức năng:

Mỗi hàm thực hiện một công việc cụ thể
Giúp tiết kiệm thời gian viết code (không phải viết lại nhiều lần)

🔹 4. Về giá trị trả về:

Một số hàm có trả về giá trị: int(), len(), input()
Một số hàm không trả về giá trị: print()

💡 Tóm lại: Tất cả các hàm đều có dấu ngoặc (), có thể có tham số bên trong, và mỗi hàm thực hiện một nhiệm vụ riêng biệt!

Slide 3/12

📚 1. MỘT SỐ HÀM THIẾT KẾ SẴN CỦA PYTHON

📌 Hoạt động 1: Tìm hiểu một số hàm của Python

Mục tiêu:
Quan sát một số câu lệnh trong Bảng 26.1 và cho biết những câu lệnh này có điểm chung gì.

📝 Bảng 26.1: Một số lệnh trong Python

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

🔍 Điểm chung:

1. 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.

2. Về tham số: Bên trong các dấu ngoặc, nói chung, em 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í, trong một số trường hợp, cả các biểu thức.

Slide 4/12

💡 VÍ DỤ SỬ DỤNG HÀM

📝 Ví dụ 1: Hàm print()

>>> print("Thời khoá biểu")
Thời khoá biểu
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.

📝 Ví dụ 2: Hàm int()

>>> x = int("52")
>>> x
52
Lệnh x = int("52") chuyển xâu "52" thành số nguyên 52.

📝 Ví dụ 3: Hàm type()

>>> y = 3.14
>>> type(y)
<class 'float'>
Lệnh type(y) trả lại kiểu dữ liệu của biến y.

📝 Ví dụ 4: Hàm input() - Không có tham số

>>> x = input()
# Người dùng nhập: Hello
>>> x
'Hello'
Trong một số trường hợp bên trong dấu ngoặc có thể bỏ trống. 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.
Slide 5/12

📖 CÚ PHÁP GỌI HÀM

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

<tên hàm>(<danh sách tham số hàm>)

📝 GHI NHỚ

📌 Python cung cấp sẵn nhiều hàm thực hiện những công việc khác nhau cho phép người dùng được tuỳ ý sử dụng khi viết chương trình bằng các câu lệnh gọi hàm tương ứng.

✏️ BÀI TẬP CỦNG CỐ

📝 Câu hỏi:

Mô tả tham số và giá trị trả lại của mỗi hàm sau: float(), str(), len(), list().


✅ ĐÁP ÁN CHI TIẾT

1️⃣ Hàm float()

📥 Tham số: Một số nguyên, chuỗi số, hoặc giá trị boolean
📤 Giá trị trả lại: Số thực (kiểu float)

>>> float(5) # Từ số nguyên
5.0
>>> float("3.14") # Từ chuỗi
3.14
>>> float(True) # Từ boolean
1.0

2️⃣ Hàm str()

📥 Tham số: Bất kỳ kiểu dữ liệu nào (số, boolean, list, ...)
📤 Giá trị trả lại: Chuỗi kí tự (kiểu string)

>>> str(123) # Từ số nguyên
'123'
>>> str(3.14) # Từ số thực
'3.14'
>>> str(True) # Từ boolean
'True'

3️⃣ Hàm len()

📥 Tham số: Một chuỗi, danh sách, tuple, hoặc đối tượng có độ dài
📤 Giá trị trả lại: Số nguyên (độ dài của đối tượng)

>>> len("Hello") # Độ dài chuỗi
5
>>> len([1, 2, 3, 4]) # Độ dài danh sách
4
>>> len("Tin học 10") # Khoảng trắng cũng đếm
10

4️⃣ Hàm list()

📥 Tham số: Một đối tượng có thể lặp (chuỗi, tuple, range, ...)
📤 Giá trị trả lại: Danh sách (kiểu list)

>>> list("abc") # Từ chuỗi thành list
['a', 'b', 'c']
>>> list(range(5)) # Từ range thành list
[0, 1, 2, 3, 4]
>>> list((1, 2, 3)) # Từ tuple thành list
[1, 2, 3]
💡 Tóm tắt:
  • float() → Chuyển đổi sang số thực
  • str() → Chuyển đổi sang chuỗi kí tự
  • len() → Tính độ dài/số phần tử
  • list() → Chuyển đổi sang danh sách
Slide 6/12

🛠️ 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).

📌 Hoạt động 2: Cách thiết lập hàm trong Python

Mục tiêu:
Quan sát các ví dụ sau để biết cách viết hàm.

📝 Ví dụ 1: Cách viết hàm có trả lại giá trị

>>> def inc(n):
return n+1
>>> inc(3)
4

📝 Ví dụ 2: Cách viết 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
Slide 7/12

📖 CÚ PHÁP ĐỊNH NGHĨA HÀM

🔖 GHI NHỚ

📌 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ụt 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>(<tham số>):
<khối lệnh>
return <giá trị>

📖 Cú pháp thiết lập hàm KHÔNG trả lại giá trị:

def <tên hàm>(<tham số>):
<khối lệnh>
return

⚠️ Lưu ý:

📌 Để thiết lập hàm trả lại giá trị, câu lệnh return trong khai báo hàm cần có <giá trị> đi kèm.

📌 Để thiết lập hàm không trả lại giá trị có thể dùng lệnh return không có <giá trị> hoặc không cần có return.

Slide 8/12

✏️ BÀI TẬP CỦNG CỐ

📝 Quan sát và giải thích các hàm sau

📌 Bài a):

Quan sát hàm sau, giải thích cách thiết lập và chức năng của hàm.

def Nhap_xau():
msg = input("Nhập một xâu: ")
return msg

✅ Đáp án chi tiết:

📌 1. Tên hàm và tham số:
  • Tên hàm: Nhap_xau
  • Tham số: Không có tham số (dấu ngoặc trống)
📌 2. Chức năng của hàm:

Hàm này thực hiện yêu cầu người dùng nhập vào một xâu kí tự từ bàn phím và trả về xâu đó.

📌 3. Giá trị trả về:

Hàm CÓ trả về giá trị thông qua lệnh return msg. Giá trị trả về là xâu kí tự mà người dùng đã nhập.

💡 Ví dụ sử dụng:

>>> xau_nhap = Nhap_xau()
Nhập một xâu: Hello Python
>>> print(xau_nhap)
Hello Python
📝 Tóm tắt:
  • Hàm không cần tham số đầu vào
  • Sử dụng input() để nhận dữ liệu từ người dùng
  • Lưu giá trị nhập vào biến msg
  • Trả về giá trị msg cho nơi gọi hàm

📌 Bài b):

Quan sát hàm sau, giải thích cách thiết lập và chức năng của hàm.

def Inday(n):
for k in range(n):
print(k, end = " ")

✅ Đáp án chi tiết:

📌 1. Tên hàm và tham số:
  • Tên hàm: Inday
  • Tham số: Có 1 tham số là n (một số nguyên)
📌 2. Chức năng của hàm:

Hàm này in ra dãy các số từ 0 đến n-1, các số cách nhau bởi khoảng trắng (không xuống dòng).

📌 3. Giá trị trả về:

Hàm KHÔNG trả về giá trị (không có lệnh return). Hàm chỉ thực hiện việc in ra màn hình.

📌 4. Chi tiết cách hoạt động:
  • range(n) tạo dãy số từ 0 đến n-1
  • Vòng lặp for duyệt qua từng giá trị k trong dãy
  • print(k, end=" ") in giá trị k kèm khoảng trắng (không xuống dòng)
💡 Ví dụ sử dụng:

>>> Inday(5)
0 1 2 3 4
>>> Inday(8)
0 1 2 3 4 5 6 7
>>> Inday(3)
0 1 2
📝 Tóm tắt:
  • Hàm nhận 1 tham số n (số nguyên dương)
  • In ra n số từ 0 đến n-1
  • Các số cách nhau bởi khoảng trắng
  • Không có giá trị trả về
Slide 9/12

🖥️ THỰC HÀNH

💻 Thiết lập hàm trong Python

📋 Nhiệm vụ 1

Viết hàm yêu cầu người dùng nhập họ tên rồi đưa lời chào ra màn hình.

💡 Hướng dẫn:

Chương trình có thể như sau:

def meeting():
ten = input("Nhập họ tên của em: ")
print("Xin chào ", ten)
# Gọi hàm
meeting()
🎯 Kết quả khi chạy:

Nhập họ tên của em: Nguyễn Văn A
Xin chào Nguyễn Văn A
📌 Giải thích:
  • def meeting(): - Định nghĩa hàm tên meeting, không có tham số
  • input() - Nhận họ tên từ người dùng và lưu vào biến ten
  • print() - In lời chào kèm họ tên ra màn hình
  • meeting() - Gọi hàm để thực thi
Slide 10/12

🖥️ THỰC HÀNH (tiếp)

📋 Nhiệm vụ 2

Viết hàm prime(n) với tham số là số tự nhiên n và trả lại True nếu n là số nguyên tố, trả lại False nếu n không phải là số nguyên tố.

💡 Hướng dẫn:

📚 Khái niệm: Số nguyên tố là số tự nhiên lớn hơn 1, không có ước nào ngoài 1 và chính nó.

💭 Ý tưởng: Để thiết lập hàm prime(n) chúng ta cần tính số ước thực sự của n (từ 1 đến n – 1).

🔢 Biến C: Dùng để đếm số các ước thực sự của n.

✅ Kết luận: n sẽ là số nguyên tố khi và chỉ khi C = 1 (chỉ có ước là 1).

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
🎯 Ví dụ sử dụng:

>>> prime(7)
True

>>> prime(10)
False
Slide 11/12

📝 LUYỆN TẬP & VẬN DỤNG

💪 LUYỆN TẬP

📌 Bài 1:

Viết hàm với tham số là số tự nhiên n in ra các số là ước nguyên tố của n.

💡 Gợi ý: Sử dụng hàm prime() trong phần thực hành.

💡 Phân tích:

Bước 1: Duyệt qua tất cả các số từ 2 đến n

Bước 2: Kiểm tra xem số đó có phải là ước của n không (n chia hết cho số đó)

Bước 3: Nếu là ước, kiểm tra thêm xem có phải số nguyên tố không (sử dụng hàm prime())

Bước 4: Nếu cả hai điều kiện đều thỏa, in số đó ra

📝 Code mẫu:

# Hàm kiểm tra số nguyên tố (từ phần thực hành)
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
# Hàm in ước nguyên tố
def uoc_nguyen_to(n):
print(f"Các ước nguyên tố của {n} là:")
for i in range(2, n + 1):
if n % i == 0 and prime(i):
print(i, end = " ")
# Gọi hàm
uoc_nguyen_to(30)
🎯 Kết quả khi chạy:

Các ước nguyên tố của 30 là:
2 3 5

Giải thích: 30 = 2 × 3 × 5, nên các ước nguyên tố của 30 là 2, 3 và 5.

📌 Bài 2:

Viết hàm numbers(s) đếm số các chữ số có trong xâu s.

📝 Ví dụ: numbers("0101abc") = 4

💡 Phân tích:

Bước 1: Duyệt qua từng ký tự trong xâu s

Bước 2: Kiểm tra xem ký tự đó có phải là chữ số (0-9) không

Bước 3: Nếu là chữ số, tăng biến đếm lên 1

Bước 4: Trả về tổng số chữ số đã đếm được

📝 Code mẫu:

def numbers(s):
count = 0
for char in s:
if char.isdigit():
count = count + 1
return count
# Ví dụ sử dụng
print(numbers("0101abc")) # Kết quả: 4
print(numbers("Hello123")) # Kết quả: 3
🎯 Ví dụ kết quả:

>>> numbers("0101abc")
4

>>> numbers("Hello123World456")
6

>>> numbers("Python")
0

🎯 VẬN DỤNG

📌 Bài 1:

Trong khi viết hàm có thể có nhiều lệnh return. Quan sát hàm sau và giải thích ý nghĩa của những lệnh return. Hàm này có điểm gì khác so với hàm prime() đã được mô tả trong phần thực hành.

def prime(n):
if n < 2:
return False
k = 2
while k < n:
if n % k == 0:
return False
k = k + 1
return True

💡 Giải thích ý nghĩa các lệnh return:

🔹 return False (dòng 3):

Nếu n < 2, trả về False ngay lập tức vì số nhỏ hơn 2 không phải số nguyên tố (theo định nghĩa). Hàm kết thúc tại đây.

🔹 return False (dòng 7):

Nếu tìm thấy một ước số k (n chia hết cho k), trả về False ngay lập tức vì n không phải số nguyên tố. Hàm dừng và không cần kiểm tra thêm.

🔹 return True (dòng 9):

Nếu vòng lặp kết thúc mà không tìm thấy ước số nào, nghĩa là n chỉ có ước là 1 và chính nó, trả về True (n là số nguyên tố).

📊 So sánh với hàm prime() ban đầu:

Tiêu chí Hàm cũ Hàm mới
Số lệnh return 2 lệnh 3 lệnh
Cách hoạt động Đếm hết tất cả ước, sau đó kiểm tra Dừng ngay khi tìm thấy ước
Bắt đầu kiểm tra Từ k = 1 Từ k = 2 (tối ưu hơn)
Hiệu suất Chậm hơn Nhanh hơn (thoát sớm)
💡 Kết luận:
  • Hàm mới tối ưu hơn vì dừng ngay khi tìm thấy ước số
  • Hàm mới rõ ràng hơn với việc xử lý trường hợp đặc biệt (n < 2)
  • Cả hai hàm đều cho kết quả đúng, nhưng hàm mới hiệu quả hơn

📌 Bài 2:

Viết chương trình yêu cầu nhập từ bàn phím một xâu kí tự, sau đó thông báo:

  • Tổng số các kí tự là chữ số của xâu.
  • Tổng số các kí tự là chữ cái tiếng Anh trong xâu.
💡 Yêu cầu: Viết hàm cho mỗi yêu cầu trên.

📝 Code đầy đủ:

# Hàm đếm số chữ số
def dem_chu_so(s):
count = 0
for char in s:
if char.isdigit():
count = count + 1
return count
# Hàm đếm số chữ cái tiếng Anh
def dem_chu_cai(s):
count = 0
for char in s:
if char.isalpha():
count = count + 1
return count
# Chương trình chính
xau = input("Nhập một xâu kí tự: ")
so_chu_so = dem_chu_so(xau)
so_chu_cai = dem_chu_cai(xau)
print(f"Tổng số chữ số: {so_chu_so}")
print(f"Tổng số chữ cái tiếng Anh: {so_chu_cai}")
🎯 Ví dụ kết quả khi chạy:

Nhập một xâu kí tự: Hello123World456!
Tổng số chữ số: 6
Tổng số chữ cái tiếng Anh: 10
📌 Giải thích:
  • isdigit() - Kiểm tra ký tự có phải chữ số (0-9) không
  • isalpha() - Kiểm tra ký tự có phải chữ cái (a-z, A-Z) không
  • Cả hai hàm đều duyệt qua từng ký tự và đếm số lượng
  • Chương trình chính gọi cả hai hàm và hiển thị kết quả
Slide 12/12

🎉 TỔNG KẾT BÀI HỌC

🎓

KIẾN THỨC TRỌNG TÂM

📌 1. HÀM THIẾT KẾ SẴN

✅ Python cung cấp nhiều hàm thiết kế sẵn

✅ Có dấu ngoặc đơn () sau tên hàm

✅ Có thể có hoặc không có tham số

✅ Ví dụ: print(), input(), len(), int()...

📌 2. HÀM TỰ ĐỊNH NGHĨA

✅ Dùng từ khóa def để định nghĩa

✅ Cú pháp: def ten_ham(tham_so):

✅ Khối lệnh viết lùi vào sau dấu :

✅ Có thể có hoặc không có return

📌 3. LỢI ÍCH CỦA HÀM

💡 Tránh viết lại code nhiều lần

💡 Code dễ đọc, dễ bảo trì

💡 Tái sử dụng code hiệu quả

💡 Chia nhỏ bài toán phức tạp

📌 4. GHI NHỚ CÚ PHÁP

# Hàm có trả về giá trị
def ten_ham(tham_so):
# Khối lệnh
return gia_tri
# Hàm không trả về giá trị
def ten_ham(tham_so):
# Khối lệnh
return # hoặc không cần return

🎉 HOÀN THÀNH BÀI HỌC!

✨ Chúc các em học tốt và thực hành nhiều! ✨
📚 Hãy thử tự tạo các hàm của riêng mình!
💪 Làm thêm các bài tập để nắm vững kiến thức!

Lên đầu trang