Yêu Cầu Cần Đạt
- Biết cách thiết lập các tham số của hàm.
- Hiểu được cách truyền giá trị thông qua đối số của hàm.
- Biết viết chương trình có sử dụng chương trình con.
1. Tham Số Và Đối Số Của Hàm
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ố vào hàm.
return a + b + c
Gọi hàm:
Kết quả: 6
Hoặc:
f(x, y, z)
Kết quả: 35
Nếu gọi f(a,b,c) sẽ báo lỗi:
NameError: name 'a' is not defined
• Tham số là các biến xuất hiện trong phần định nghĩa hàm. • Đối số là các giá trị truyền vào khi gọi hàm. • Khi gọi hàm, đối số sẽ được gán cho các tham số theo đúng thứ tự. • Số lượng đối số phải bằng số lượng tham số.
2. Cách Sử Dụng Chương Trình Con
Hoạt động 2
Khi nào nên sử dụng chương trình con? Ví dụ: Viết chương trình kiểm tra các số nguyên tố từ 1 đến n.
Hàm kiểm tra số nguyên tố:
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
kchạy từ1đếnn - 1.cđếm số ước củantrong khoảng từ1đếnn - 1.- Nếu
c == 1thì chỉ có đúng một ước là1, suy ranlà số nguyên tố, hàm trả vềTrue. - Ngược lại, trả về
False.
Chương trình chính:
for k in range(1, n + 1):
if prime(k):
print(k, end=" ")
- Nhập số tự nhiên
n. - Duyệt các số từ
1đếnn. - Với mỗi số
k, nếuprime(k)trả vềTruethì in rak. end=" "giúp các số được in trên cùng một dòng, cách nhau bởi dấu cách.
Lưu ý: Hàm
prime()ở trên không xử lý đúng trường hợpn < 2.
Để chính xác hơn, nên thêm:
if n < 2: return False
ở đầu hàm prime().
Ví dụ 2: Tính tổng các số dương trong danh sách
S = 0
for k in A:
if k > 0:
S = S + k
return S
A = [0, 2, -1, 5, 10, -3]
B = [1, -10, -11, 8, 2, 0, -5]
print(tongduong(A))
print(tongduong(B))
print(B)
tongduong(A):- Các số dương là
2, 5, 10 - Tổng =
2 + 5 + 10 = 17
- Các số dương là
tongduong(B):- Các số dương là
1, 8, 2 - Tổng =
1 + 8 + 2 = 11
- Các số dương là
print(B):- Hàm
tongduong()không thay đổi danh sáchB, chỉ tính tổng các số dương. - Vì vậy
Bvẫn là:
- Hàm
THỰC HÀNH
Nhiệm vụ 1: Hàm f_sum(A, b)
Nếu b = 0 thì tính tổng các số trong danh sách. Nếu b ≠ 0 thì chỉ tính tổng các số dương.
S = 0
for x in A:
if b == 0:
S = S + x
else:
if x > 0:
S = S + x
return S
A: danh sách các số.b: tham số điều khiển.- Nếu
b == 0: tính tổng tất cả các phần tử trong danh sách. - Nếu
b != 0: chỉ tính tổng các số dương (x > 0).
- Nếu
Nhiệm vụ 2: Hàm f_dem(msg, sep)
Đếm số từ trong một xâu, phân tách bởi ký tự sep.
# Lỗi vì chuỗi phân tách không được rỗng.
print(f_dem("Mùa thu lịch sử", " "))
# Kết quả: 4
print(f_dem("Mùa thu lịch sử", "-"))
# Kết quả: 1
Giải thích:
f_dem("Mùa thu lịch sử", " ")→ Chuỗi được tách thành["Mùa", "thu", "lịch", "sử"]nên có 4 phần tử.f_dem("Mùa thu lịch sử", "-")→ Chuỗi không chứa dấu-, nênsplit("-")trả về["Mùa thu lịch sử"], có 1 phần tử.
Kết quả cuối cùng:
f_dem("Mùa thu lịch sử", " ")→ 4f_dem("Mùa thu lịch sử", "-")→ 1
xlist = msg.split(sep)
return len(xlist)
msg: chuỗi cần xử lý.sep: ký tự hoặc chuỗi dùng để tách.msg.split(sep): tách chuỗimsgthành một danh sách theosep.len(xlist): trả về số phần tử trong danh sách sau khi tách.
Nhiệm vụ 3: Hàm merge_str(s1, s2)
Ghép hai xâu theo từng ký tự. Ví dụ: s1="1111", s2="0000" → "10101010"
S = ""
l1 = len(s1)
l2 = len(s2)
l = min(l1, l2)
for i in range(l):
S = S + s1[i] + s2[i]
if l1 < l2:
for i in range(l, l2):
S = S + s2[i]
if l2 < l1:
for i in range(l, l1):
S = S + s1[i]
return S
len(s1),len(s2): lấy độ dài của hai chuỗi.l = min(l1, l2): lấy độ dài của chuỗi ngắn hơn.- Vòng lặp đầu tiên ghép xen kẽ từng ký tự của hai chuỗi.
- Nếu một chuỗi dài hơn, phần ký tự còn lại sẽ được nối vào cuối.
return S: trả về chuỗi sau khi ghép.
LUYỆN TẬP
VẬN DỤNG
