Tin học 10 – Bài 27. Tham số của hàm

1. Tham số và đối số của hàm

  • Tham số (parameter): Là biến được khai báo trong định nghĩa của hàm. Tham số được sử dụng như biến trong định nghĩa hàm.
  • Đối số (argument): Là giá trị được truyền vào hàm khi gọi hàm. Đối số được sử dụng để gán giá trị cho tham số.
Python
def f(a, b, c):
    return a + b + c

# Gọi hàm với giá trị cụ thể
print(f(1, 2, 3))  # Đối số là 1, 2, 3

# Gọi hàm với biến đã gán giá trị
x, y, z = 10, 20, 5
print(f(x, y, z))  # Đối số là x, y, z

2. Cách sử dụng chương trình con

  • Lợi ích của chương trình con:
    • Giúp phân chia bài toán lớn thành các bài toán nhỏ hơn.
    • Cấu trúc chương trình rõ ràng, dễ hiểu.
    • Dễ dàng chỉnh sửa và nâng cấp.
Python
def prime(n):
    C = 0
    k = 1
    while k < n:
        if n % k == 0:
            C += 1
        k += 1
    if C == 1:
        return True
    else:
        return False

# Chương trình chính
n = int(input("Nhập số tự nhiên n: "))
for k in range(1, n+1):
    if prime(k):
        print(k, end=" ")

Thực hành

Nhiệm vụ 1:

Thiết lập hàm f_sum(A, b) tính tổng các số của danh sách A. Nếu b=0, tính tổng tất cả số; nếu b khác 0, tính tổng số dương.

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

Nhiệm vụ 2:

Thiết lập hàm f_dem(msg, sep) đếm số từ trong xâu msg với ký tự tách từ là sep.

Python
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) gộp hai xâu s1 và s2 xen kẽ.

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

Luyện tập

1. Thiết lập hàm power(a, b, c) trả lại giá trị (a+b)^c:

Python
def power(a, b, c):
    return (a + b) ** c

2. Viết chương trình nhập n số tự nhiên từ bàn phím và tính tổng:

Python
def nhap_so():
    xau = input("Nhập các số tự nhiên cách nhau bởi dấu cách: ")
    A = xau.split()
    return [int(x) for x in A]

def tinh_tong(A):
    return sum(A)

A = nhap_so()
print("Tổng của các số:", tinh_tong(A))

Vận dụng

1. Viết chương trình tính ước chung lớn nhất (ƯCLN) của hai số tự nhiên:

Python
def ucln(m, n):
    while m != n:
        if m < n:
            n -= m
        else:
            m -= n
    return m

m, n = eval(input("Nhập hai số tự nhiên m, n: "))
print("ƯCLN của hai số trên là:", ucln(m, n))

2. Thiết lập hàm change(ho_ten, c) chuyển đổi xâu ho_ten thành chữ hoa hoặc thường:

Python
def change(ho_ten, c):
    if c == 0:
        ho_ten = ho_ten.upper()
    else:
        ho_ten = ho_ten.lower()
    return ho_ten

Câu hỏi trắc nghiệm dạng D1 và D2 Tin học 10 Bài 27. Tham số của hàm

Thời gian làm bài: 30 phút
Đáp án chỉ hiển thị sau khi hoàn thành bài làm
Câu hỏi sẽ được hiển thị ngẫu nhiên
Vui lòng nhập họ và tên để bắt đầu làm bài

NB

Phương án nào sau đây mô tả đúng về tham số của hàm trong Python?

NB

Phương án nào sau đây mô tả đúng về đối số của hàm trong Python?

NB

Phương án nào sau đây xác định đúng vai trò của từ khóa "def" trong Python?

NB

Trong đoạn mã sau, phương án nào mô tả đúng về cách gọi hàm?
def f(a, b, c):
return a + b + c

kq = f(1, 2, 3)

NB

Phương án nào sau đây chỉ ra đúng mục đích của lệnh return trong định nghĩa hàm?

NB

Trong đoạn mã sau, các giá trị nào là đối số?
def tinh_tong(x, y, z):
return x + y + z

ket_qua = tinh_tong(5, 10, 15)

NB

Phương án nào sau đây chỉ ra giá trị của biến result sau khi thực hiện đoạn mã dưới đây?
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
result = f_sum([1, -2, 3, -4], 0)

TH

Phương án nào sau đây giải thích đúng lý do xảy ra lỗi khi thực hiện đoạn mã sau?
def f(a, b, c):
return a + b + c

f(a, b, c)

TH

Phương án nào sau đây giải thích đúng về sự khác biệt giữa tham số và đối số trong lập trình?

TH

Phương án nào sau đây giải thích đúng kết quả của đoạn mã sau?
def f_dem(msg, sep):
xlist = msg.split(sep)
return len(xlist)

print(f_dem("Mùa thu lịch sử", " "))

TH

Phương án nào sau đây giải thích đúng lý do nên sử dụng chương trình con trong lập trình?

TH

Phương án nào sau đây giải thích đúng kết quả của hàm merge_str("abc", "123")?
def merge_str(s1, s2):
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

TH

Phương án nào sau đây giải thích đúng kết quả của sự khác nhau giữa hai lời gọi hàm sau?
f_sum([1, 2, 3, 4], 0)
f_sum([1, 2, 3, 4], 1)

TH

Phương án nào sau đây giải thích đúng về giá trị của biến kết quả khi thực hiện đoạn mã sau?
def prime(n):
C = 0
k = 1
while k <= n:
if n % k == 0:
C = C + 1
k = k + 1
if C == 2:
return True
else:
return False
ket_qua = prime(7)

VD

Phương án nào sau đây xác định đúng kết quả sau khi thực hiện đoạn mã sau?
def tongduong(A):
S = 0
for k in A:
if k > 0:
S = S + k
return S
A = [-1, 0, 5, -3, 2]
B = [0, -2, -4]
tong = tongduong(A) + tongduong(B)

VD

Phương án nào sau đây xác định đúng giá trị trả về của lời gọi hàm f_sum([12,], 0)?
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

VD

Phương án nào sau đây xác định đúng kết quả khi thực hiện đoạn mã sau?
def merge_str(s1, s2):
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
ket_qua = merge_str("abc", "12345")

VD

Phương án nào sau đây xác định đúng giá trị khi thực hiện lời gọi hàm sau?
def f_dem(msg, sep):
xlist = msg.split(sep)
return len(xlist)
ket_qua = f_dem("Python,Java,C++,JavaScript", ",")

VD

Phương án nào sau đây xác định đúng đoạn mã cần bổ sung vào chỗ trống để tạo ra hàm power(a, b, c) trả về giá trị (a+b)^c?
def power(a, b, c):
________

VD

Phương án nào sau đây xác định đúng đoạn mã cần bổ sung vào chỗ trống để tạo ra hàm change(ho_ten, c) thực hiện chức năng chuyển đổi xâu ho_ten sang chữ in hoa nếu c=0, ngược lại chuyển sang chữ in thường?
def change(ho_ten, c):

Một nhóm học sinh được giao nhiệm vụ xây dựng chương trình để tính điểm trung bình môn Tin học của học sinh trong lớp. Họ quyết định tạo một hàm có tên là tinh_diem_tb nhận vào một danh sách điểm của học sinh và trả về điểm trung bình. Tuy nhiên, giáo viên yêu cầu bổ sung thêm một tham số để có thể lựa chọn giữa việc tính điểm trung bình cộng của tất cả các điểm thành phần hoặc chỉ tính điểm trung bình của các điểm lớn hơn hoặc bằng 5. Nhóm học sinh đã viết mã như sau: def tinh_diem_tb(diem_so, loai=0):
    tong = 0
    dem = 0
    for diem in diem_so:
        if loai == 0:
            tong = tong + diem
            dem = dem + 1
        else:
            if diem >= 5:
                tong = tong + diem
                dem = dem + 1
    if dem == 0:
        return 0
    else:
        return tong / dem

NB Trong định nghĩa hàm trên, diem_so và loai là tham số của hàm.

TH Tham số loai có giá trị mặc định là 0, nghĩa là nếu không truyền giá trị cho loai thì hàm sẽ tính điểm trung bình của tất cả các điểm.

TH Nếu gọi hàm tinh_diem_tb(, 1), kết quả trả về sẽ là 5.5.

VD Nếu tất cả điểm số đều nhỏ hơn 5 và tham số loai khác 0, hàm sẽ trả về 0.

Một lập trình viên đang phát triển một chương trình để xử lý đơn hàng trong cửa hàng trực tuyến. Họ đã tạo một hàm tinh_tien_hang có nhiệm vụ tính tổng tiền hàng dựa trên danh sách sản phẩm và giá. Đoạn mã chương trình như sau: def tinh_tien_hang(san_pham, gia, giam_gia=0):
    tong = 0
    for i in range(len(san_pham)):
        tong = tong + gia[i]
    if giam_gia > 0:
        tong = tong * (1 - giam_gia/100)
    return tong sp = ["Bàn phím", "Chuột", "Tai nghe"]
gia_tien = [500000, 300000, 400000]
ket_qua = tinh_tien_hang(sp, gia_tien, 10)

NB Trong đoạn mã trên, san_pham, gia, giam_gia là các tham số, còn sp, gia_tien, 10 là các đối số khi gọi hàm.

TH Tham số giam_gia có giá trị mặc định là 0, nên khi không truyền giá trị cho tham số này, sẽ không có giảm giá.

TH Giá trị của biến ket_qua sau khi thực hiện đoạn mã là 1080000 đồng.

VD Để hàm tinh_tien_hang hoạt động đúng khi được gọi với các đối số sp, gia_tien, 10, cần đảm bảo rằng độ dài của hai danh sách sp và gia_tien phải bằng nhau.

Một sinh viên đang phát triển một ứng dụng Python để quản lý thư viện. Họ cần một hàm để lọc sách theo thể loại. Sinh viên đã viết đoạn mã sau: def loc_sach(danh_sach_sach, the_loai=None):
    ket_qua = []
    if the_loai is None:
        return danh_sach_sach
    for sach in danh_sach_sach:
        if sach["the_loai"] == the_loai:
            ket_qua.append(sach)
    return ket_qua sach = [
    {"ten": "Lập trình Python", "the_loai": "CNTT"},
    {"ten": "Toán rời rạc", "the_loai": "Toán"},
    {"ten": "Cấu trúc dữ liệu", "the_loai": "CNTT"}
] sach_cntt = loc_sach(sach, "CNTT")
tat_ca_sach = loc_sach(sach)

NB Trong đoạn mã trên, danh_sach_sach và the_loai là tham số của hàm loc_sach.

TH Tham số the_loai có giá trị mặc định là None, nghĩa là nếu không truyền giá trị cho tham số này, hàm sẽ trả về toàn bộ danh sách sách.

TH Biến sach_cntt chứa danh sách gồm 2 cuốn sách thuộc thể loại "CNTT".

VD Nếu thay đổi giá trị None thành một chuỗi rỗng ("") cho tham số mặc định the_loai, hàm sẽ hoạt động tương tự như trước.

Một lập trình viên mới đang tìm hiểu về tham số và đối số trong Python. Họ đã viết một đoạn mã như sau để tính tổng của các số nguyên từ 1 đến n: def tinh_tong(n):
    tong = 0
    for i in range(1, n + 1):
        tong = tong + i
    return tong a = 5
b = tinh_tong(a)
c = tinh_tong(a + 2)

NB Trong đoạn mã trên, n là tham số, còn a và a + 2 là đối số khi gọi hàm tinh_tong.

TH Không cần sử dụng lệnh return trong hàm tinh_tong vì giá trị của biến tong có thể sử dụng trực tiếp bên ngoài hàm.

TH Giá trị của biến b sau khi thực hiện đoạn mã trên là 15.

VD Nếu muốn sửa đổi hàm tinh_tong để tính tổng các số từ n đến m, ta cần thêm một tham số m và thay đổi vòng lặp range(1, n + 1) thành range(n, m + 1).

Bảng xếp hạng

Chưa có kết quả nào.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *