1. Khởi động (Engagement)
Quan sát các lệnh sau và cho biết sự khác nhau giữa tham số (parameter) và đối số (argument).
💡 Câu hỏi suy ngẫm: Khi chúng ta gọi một hàm, làm thế nào dữ liệu được truyền qua tham số vào hàm? Có sự khác biệt gì giữa việc truyền số nguyên, xâu kí tự và các kiểu dữ liệu khác?
Trong bài học này, chúng ta sẽ tìm hiểu sâu về cách thiết lập các tham số của hàm và cơ chế truyền giá trị thông qua đối số hàm.
2. Hình thành kiến thức (Knowledge)
1. Tham số và đối số của hàm
Quan sát ví dụ sau, tìm hiểu cách dữ liệu được truyền qua tham số vào hàm:
Phân tích:
- Hàm
f()có ba tham số a, b, c f(1, 2, 3)- Hàmf()được gọi với ba giá trị cụ thểf(x, y, z)- Hàmf()được gọi với ba biến đã có giá trịf(a, b, c)- Lời gọi hàm bị lỗi nếu các tham số được truyền vào chưa có giá trị
Khái niệm:
- Tham số (Parameter): Là các biến đại diện được ghi trong định nghĩa hàm (
def f(a, b, c):) - Đối số (Argument): Là giá trị thật sự em truyền vào khi gọi hàm (
f(1, 2, 3))
2. Cách truyền dữ liệu qua tham số
Dữ liệu được truyền vào hàm thông qua cơ chế truyền giá trị. Khi gọi hàm, các đối số được gán cho các tham số tương ứng theo thứ tự.
Ví dụ:
3. Các ví dụ về hàm với tham số
Ví dụ 1: Hàm không trả lại giá trị
Ví dụ 2: Hàm kiểm tra số nguyên tố
4. Thiết lập hàm có nhiều lệnh return
Trong khi viết hàm có thể có nhiều lệnh return. Quan sát hàm sau:
Hàm này có điểm khác so với hàm prime() trước đó:
- Tối ưu hơn: kiểm tra n < 2 trước
- Thoát sớm khi tìm thấy ước (return False)
- Không cần biến đếm C
3. Luyện tập (Practice)
Bài tập thực hành
Bài tập 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.
Chương trình mẫu:
Bài tập 2:
Viết hàm numbers(s) đếm số các chữ số có trong xâu s.
Ví dụ: numbers("0101abc") = 4.
Gợi ý:
Bài tập 3:
Viết hàm meeting() 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.
Gợi ý:
Thực hành tại máy:
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
Viết hàm cho mỗi yêu cầu trên.
Chương trình mẫu:
4. Vận dụng (Application)
Bài tập vận dụng
Bài tập 1: Hàm tính UCLN và BCNN
Viết hàm ucln(a, b) trả về ước chung lớn nhất của hai số a, b. Viết hàm bcnn(a, b) trả về bội chung nhỏ nhất của hai số a, b.
Gợi ý:
Bài tập 2: Hàm kiểm tra năm nhuận
Viết hàm la_nam_nhuan(nam) trả về True nếu năm đó là năm nhuận, False nếu không.
Điều kiện năm nhuận:
- Năm chia hết cho 4 nhưng không chia hết cho 100
- Hoặc năm chia hết cho 400
Gợi ý:
Bài tập 3: Hàm đổi tiền
Viết hàm doi_tien(so_tien) đổi số tiền thành các mệnh giá: 500k, 200k, 100k, 50k, 20k, 10k, 5k, 1k.
Gợi ý:
Thảo luận:
- Lợi ích của việc chia chương trình thành các hàm nhỏ là gì?
- Khi nào nên dùng nhiều lệnh return trong một hàm?
- Tại sao cần kiểm tra điều kiện đầu vào của tham số trong hàm?
Ghi nhớ kiến thức 🎯
- ✅ Tham số là biến trong định nghĩa hàm, đối số là giá trị khi gọi hàm.
- ✅ Dữ liệu được truyền vào hàm theo cơ chế truyền giá trị.
- ✅ Có thể có nhiều lệnh return trong một hàm.
- ✅ Hàm giúp chương trình có cấu trúc rõ ràng và dễ bảo trì.
- ✅ Nên kiểm tra điều kiện đầu vào của tham số để tránh lỗi.