BÀI 27: THAM SỐ CỦA HÀM
"Tìm hiểu cách truyền dữ liệu qua tham số và đối số"
🎯 SAU BÀI NÀY EM SẼ
- Biết cách thiết lập các tham số của hàm
Hiểu cách định nghĩa và sử dụng tham số trong khai báo hàm.
- Hiểu cách truyền giá trị thông qua đối số hàm
Nắm vững cơ chế truyền dữ liệu khi gọi hàm thông qua đối số.
- Biết viết chương trình có sử dụng chương trình con
Ứng dụng hàm để giải quyết các bài toán thực tế.
🔍 PHÂN BIỆT THAM SỐ VÀ ĐỐI SỐ
❓ Tham số (Parameter) khác Đối số (Argument) thế nào?
📌 THAM SỐ (Parameter)
✅ Xuất hiện khi ĐỊNH NGHĨA hàm
✅ Là BIẾN trong khai báo
✅ Ví dụ: a, b, c
📌 ĐỐI SỐ (Argument)
✅ Xuất hiện khi GỌI hàm
✅ Là GIÁ TRỊ truyền vào
✅ Ví dụ: 10, x, y
🔬 HOẠT ĐỘNG 1: PHÂN BIỆT THAM SỐ VÀ ĐỐI SỐ
Quan sát ví dụ sau, tìm hiểu cách dữ liệu được truyền qua tham số hàm. Thảo luận để giải thích kết quả.
📝 Ví dụ: Cách truyền dữ liệu qua tham số
✅ GIẢI THÍCH CHI TIẾT
📌 Dòng 1-2: Định nghĩa hàm
Hàm f() được định nghĩa với ba tham số a, b, c. Hàm trả về giá trị là a + b + c.
⚠️ Chú ý: Trong định nghĩa hàm, các tham số được coi như biến.
📌 Dòng 3-4: Gọi hàm với giá trị cụ thể
Hàm f() được gọi với ba giá trị cụ thể: 1, 2, 3
Các giá trị được truyền qua tham số gọi là ĐỐI SỐ.
Kết quả: 1 + 2 + 3 = 6
📌 Dòng 5-7: Gọi hàm với biến đã có giá trị
Hàm f() được gọi với ba biến x, y, z đã được gán giá trị (dòng 5).
Các biến này cũng là ĐỐI SỐ.
Kết quả: x + y + z = 10 + 20 + 5 = 35
📌 Dòng 8-12: Lời gọi hàm BỊ LỖI
Hàm f() được gọi với ba biến a, b, c chưa được định nghĩa giá trị.
Python báo lỗi: NameError: name 'a' is not defined
⚠️ Lý do: Không thể truyền đối số chưa có giá trị vào hàm.
📖 GHI NHỚ
📝 KIẾN THỨC TRỌNG TÂM
🔹 Tham số (Parameter) của hàm được định nghĩa khi khai báo hàm và được dùng như biến trong định nghĩa hàm.
🔹 Đối số (Argument) là giá trị được truyền vào khi gọi hàm.
🔹 Khi gọi hàm, các tham số (parameter) sẽ được truyền bằng giá trị thông qua đối số (argument) của hàm.
🔹 Số lượng giá trị được truyền vào hàm bằng với số tham số trong khai báo của hàm.
✏️ BÀI TẬP CỦNG CỐ
📌 Câu 1:
Một hàm khi khai báo có một tham số, nhưng khi gọi hàm có thể có hai đối số được không?
❌ KHÔNG ĐƯỢC!
Lý do: Số lượng đối số khi gọi hàm PHẢI BẰNG với số lượng tham số trong khai báo hàm.
Python sẽ báo lỗi
TypeError nếu số đối số không khớp với số tham số!
📌 Câu 2:
Giả sử hàm f có hai tham số x, y khi khai báo, hàm sẽ trả lại giá trị x + 2*y. Lời gọi hàm f(10, a) có lỗi hay không?
⚠️ TÙY TRƯỜNG HỢP!
Nếu biến a đã được định nghĩa và có giá trị trước khi gọi hàm.
Nếu biến a chưa được định nghĩa trước khi gọi hàm.
Lời gọi hàm f(10, a) chỉ chạy được khi biến a đã được gán giá trị trước đó!
🔧 HOẠT ĐỘNG 2: KHI NÀO NÊN SỬ DỤNG CHƯƠNG TRÌNH CON?
Viết chương trình yêu cầu nhập số tự nhiên
n từ bàn phím và in các số nguyên tố nhỏ hơn hoặc bằng n ra màn hình.
💭 Suy nghĩ:
Trong Bài 26, em đã biết hàm prime(n) kiểm tra số n có là số nguyên tố hay không.
❓ Em sẽ viết chương trình giải bài toán này như thế nào?
📝 Ví dụ 1: Sử dụng chương trình con
Việc kiểm tra một số có là số nguyên tố được lặp đi lặp lại từ 1 đến n.
Do đó nên sử dụng hàm prime(n) để kiểm tra, giúp chương trình cấu trúc rõ ràng và dễ hiểu hơn.
Nhập số tự nhiên n: 20
2 3 5 7 11 13 17 19
💡 VÍ DỤ 2: CHƯƠNG TRÌNH SỬ DỤNG CHƯƠNG TRÌNH CON
Cho trước hai dãy số
A, B. Chương trình chính cần tính tổng các số hạng dương của mỗi dãy này.
Chúng ta sẽ thiết lập hàm tongduong(A) để tính tổng các số hạng lớn hơn 0 của một dãy A.
Chương trình chính sẽ gọi hàm tongduong(A).
📝 Chương trình:
🔍 Giải thích:
✅ Dãy A có các số dương: 2, 5, 10 → Tổng = 17
✅ Dãy B có các số dương: 1, 8, 2 → Tổng = 11
💡 Lợi ích: Hàm tongduong() được viết một lần nhưng sử dụng nhiều lần cho các dãy khác nhau!
📖 GHI NHỚ - LỢI ÍCH CỦA CHƯƠNG TRÌNH CON
🌟 TẠI SAO NÊN SỬ DỤNG CHƯƠNG TRÌNH CON?
🔹 1. Phân chia bài toán
Giúp phân chia việc giải một bài toán lớn thành giải quyết các bài toán nhỏ và phát huy được tinh thần làm việc nhóm.
🔹 2. Cấu trúc rõ ràng
Chương trình chính có cấu trúc rõ ràng, dễ hiểu hơn khi sử dụng các hàm con.
🔹 3. Dễ bảo trì và nâng cấp
Nếu cần hiệu chỉnh, phát triển và nâng cấp cũng thuận tiện hơn.
🔹 4. Tái sử dụng code
Một hàm được viết một lần có thể sử dụng nhiều lần ở các vị trí khác nhau trong chương trình.
💡 NGUYÊN TẮC VÀNG
"Một đoạn code xuất hiện nhiều lần
→ Hãy biến nó thành một hàm!"
✏️ BÀI TẬP CỦNG CỐ BỔ SUNG
📌 Câu 1:
Sử dụng hàm prime, em hãy viết chương trình in ra các số nguyên tố trong khoảng từ m đến n, với m, n là hai số tự nhiên và 1 < m < n.
✅ ĐÁP ÁN:
Nhập số m: 10
Nhập số n: 50
Các số nguyên tố từ 10 đến 50:
11 13 17 19 23 29 31 37 41 43 47
📌 Câu 2:
Em hãy nêu một công việc/bài toán nào đó mà có thể sử dụng hàm để giải.
💡 GỢI Ý MỘT SỐ BÀI TOÁN:
Viết hàm tinh_dtb(toan, van, anh) để tính điểm trung bình của 3 môn. Có thể sử dụng hàm này để tính điểm cho nhiều học sinh khác nhau.
Viết hàm tinh_tien_dien(so_kwh) để tính tiền điện theo bậc thang. Có thể dùng cho nhiều hộ gia đình.
Viết hàm nam_nhuan(nam) để kiểm tra một năm có phải năm nhuận không. Sử dụng khi cần kiểm tra nhiều năm khác nhau.
Viết các hàm dien_tich_hinh_tron(r), chu_vi_hinh_tron(r) để tính toán cho nhiều hình tròn khác nhau.
Viết hàm doi_sang_usd(vnd) để chuyển đổi tiền tệ từ VND sang USD. Dễ dàng chuyển đổi nhiều giá trị khác nhau.
💻 THỰC HÀNH - NHIỆM VỤ 1
Thiết lập hàm
f_sum(A, b) có chức năng tính tổng các số của danh sách A theo quy định sau:
- Nếu
b = 0thì tính tổng các số của danh sách A. - Nếu
b ≠ 0thì chỉ tính tổng các số dương của A.
📝 Hướng dẫn:
Chương trình luôn kiểm tra giá trị của đối số b khi tính tổng các số của danh sách A.
✅ ĐÁP ÁN:
• b = 0: Tổng = 5 + (-3) + 8 + (-1) + 10 + 0 = 19
• b ≠ 0: Chỉ tính số dương: 5 + 8 + 10 = 23
💻 THỰC HÀNH - NHIỆM VỤ 2
Thiết lập hàm
f_dem(msg, sep) có chức năng đếm số các từ của một xâu msg với ký tự tách từ là sep.
f_dem("Mùa thu lịch sử", " ") → Trả lại giá trị 4f_dem("Mùa-thu-lịch-sử", "-") → Trả lại giá trị 4
📝 Hướng dẫn:
Để tách xâu msg thành các từ, chúng ta dùng lệnh split(). Tham số sep chính là tham số của lệnh split().
✅ ĐÁP ÁN:
1️⃣ msg.split(sep) tách xâu msg thành danh sách các từ dựa vào ký tự phân cách sep
2️⃣ len(xlist) đếm số phần tử trong danh sách = số từ đã tách được
💻 THỰC HÀNH - NHIỆM VỤ 3
Thiết lập hàm
merge_str(s1, s2) với s1, s2 là hai xâu cần gộp.
Hàm này sẽ gộp hai xâu s1, s2 theo cách lấy lần lượt từng ký tự của s1, s2 đưa vào xâu kết quả. Nếu có một xâu hết ký tự thì đưa phần còn lại của xâu dài hơn vào xâu kết quả.
Nếu
s1 = "1111", s2 = "0000" thì xâu kết quả là "10101010"
📝 Hướng dẫn:
Gọi S là xâu kết quả sau khi gộp hai xâu s1 và s2.
✅ ĐÁP ÁN:
1️⃣ Tìm độ dài xâu ngắn hơn: l = min(l1, l2)
2️⃣ Gộp lần lượt từng ký tự của s1 và s2 cho đến khi hết xâu ngắn hơn
3️⃣ Thêm phần còn lại của xâu dài hơn vào cuối kết quả
🎯 LUYỆN TẬP & VẬN DỤNG
📚 PHẦN LUYỆN TẬP
Bài 1:
Thiết lập hàm power(a, b, c) với a, b, c là số nguyên. Hàm trả lại giá trị (a + b)c.
Bài 2:
Viết chương trình thực hiện: Nhập hai số tự nhiên từ bàn phím, hai số cách nhau bởi dấu cách. Tính và in ra tổng của hai số này.
Yêu cầu: Sử dụng hàm khi viết chương trình.
Nhập hai số cách nhau bởi dấu cách: 15 20
Tổng của 15 và 20 là: 35
🚀 PHẦN VẬN DỤNG
Bài 1:
Viết chương trình thực hiện: Nhập hai số tự nhiên từ bàn phím, hai số cách nhau bởi dấu phẩy, in ra ước chung lớn nhất (ƯCLN) của hai số.
Yêu cầu: Sử dụng hàm khi viết chương trình.
Nhập hai số cách nhau bởi dấu phẩy: 48,18
ƯCLN của 48 và 18 là: 6
Bài 2:
Thiết lập hàm change() có hai tham số là xâu ho_ten và số c. Hàm sẽ trả lại xâu ký tự ho_ten là chữ in hoa nếu c = 0. Nếu tham số c ≠ 0 thì hàm trả lại xâu ho_ten là chữ in thường.
Gợi ý: Sử dụng các phương thức s.upper() và s.lower() để chuyển đổi các ký tự của xâu s sang chữ in hoa và in thường.
🎉 TỔNG KẾT BÀI HỌC
KIẾN THỨC TRỌNG TÂM
📌 1. THAM SỐ VÀ ĐỐI SỐ
✅ Tham số (Parameter): Biến trong khai báo hàm
✅ Đối số (Argument): Giá trị khi gọi hàm
✅ Số lượng đối số phải bằng số lượng tham s���
✅ Đối số phải có giá trị khi gọi hàm
📌 2. SỬ DỤNG CHƯƠNG TRÌNH CON
✅ Phân chia bài toán lớn thành bài toán nhỏ
✅ Code rõ ràng, dễ hiểu, dễ bảo trì
✅ Tái sử dụng code hiệu quả
✅ Phát huy tinh thần làm việc nhóm
📌 3. CÚ PHÁP QUAN TRỌNG
🎉 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ử viết các hàm với nhiều tham số khác nhau!
💪 Áp dụng chương trình con để giải bài toán phức tạp!
