Tin học 10 · SGK

Bài 27. Tham số của hàm

THAM SỐ CỦA HÀM

SAU BÀI NÀY EM SẼ:

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

Tham số

>>> def f_sum(a, b, c):
return a + b + c

Đối số

>>> x, y = 5, 3
>>> f_sum(10, x, y)
18

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. Thảo luận để giải thích kết quả.

Ví dụ. Cách truyền dữ liệu qua tham số

>>> def f(a, b, c):  # Hàm f() có ba tham số a, b, c
return a + b + c
>>> f(1, 2, 3)  # Hàm f() được gọi với ba giá trị cụ thể
6
>>> x, y, z = 10, 20, 5
>>> f(x, y, z)  # Hàm f() được gọi với ba biến đã có giá trị
35
>>> 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ị
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
f(a, b, c)
NameError: name 'a' is not defined

Giải thích:

Tham số 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ố 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.

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?

Bài toán đưa ra là viết chương trình chí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. Trong phần thực hành của Bài 26 em đã biết hàm prime(n) kiểm tra số n có là số nguyên tố.

Em sẽ viết chương trình giải bài toán này như thế nào?

Ví dụ 1. 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 và do đó nên sử dụng hàm prime(n) để kiểm tra sẽ giúp chương trình cấu trúc rõ ràng và dễ hiểu hơn.

Chương trình hoàn chỉnh giải bài toán trên có thể được viết như sau:

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
n = int(input("Nhập số tự nhiên n: "))
for k in range(1, n + 1):  # Sử dụng hàm prime đã định nghĩa ở trên để kiểm tra số k
if prime(k):  # Hàm prime(k) sẽ trả lại True nếu k là số nguyên tố
print(k, end=" ")

Cho trước hai dãy số B, C, 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 có thể như sau:

>>> def tongduong(A):
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]
>>> tongduong(A)  # Sử dụng hàm tongduong tính tổng các số dương của dãy A
17
>>> tongduong(B)  # Sử dụng hàm tongduong tính tổng các số dương của dãy B
11

Sử dụng chương trình con có thể giúp phân chia việc giải một bài toán lớn thành các bài toán nhỏ và phát huy được tinh thần làm việc nhóm; chương trình chính có cấu trúc rõ ràng, dễ hiểu hơn; 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.

THỰC HÀNH

Truyền giá trị cho đối số của hàm.

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:

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.

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

def f_sum(A, b):
S = 0
for x in A:
if b == 0:
S = S + x
else:
if x > 0:
S = S + x
return S

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.

Ví dụ: f_dem("Mùa thu lịch sử", " ") trả lại giá trị 4. f_dem("Mùa thu lịch sử", "-") trả lại giá trị 1.

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().

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

def f_dem(msg, sep):
xlist = msg.split(sep)
return len(xlist)

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 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ả. Ví dụ: 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, chương trình có thể như sau:

def merge_str(s1, s2):
S = ""
l1 = len(s1)
l2 = len(s2)
n = min(l1, l2)
for i in range(n):
S = S + s1[i] + s2[i]
if l1 < l2:
for i in range(l1, l2):
S = S + s2[i]
if l2 < l1:
for i in range(l2, l1):
S = S + s1[i]
return S

LUYỆN TẬP

VẬN DỤ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.