BÀI 27: THAM SỐ CỦA HÀM


CHỦ ĐỀ 5 – BÀI 27 – TIN HỌC 10

Tham Số Của Hàm

Tham số, đối số và cách sử dụng chương trình con

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.

def f(a, b, c):
return a + b + c

Gọi hàm:

f(1,2,3)

Kết quả: 6

Hoặc:

x, y, z = 10, 20, 5
f(x, y, z)

Kết quả: 35

Nếu gọi f(a,b,c) sẽ báo lỗi:

f(a,b,c)

NameError: name 'a' is not defined

Giải thích

• 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ố:

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
Giải thích
  • k chạy từ 1 đến n - 1.
  • c đếm số ước của n trong khoảng từ 1 đến n - 1.
  • Nếu c == 1 thì chỉ có đúng một ước là 1, suy ra nsố nguyên tố, hàm trả về True.
  • Ngược lại, trả về 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=" ")
Giải thích
  • Nhập số tự nhiên n.
  • Duyệt các số từ 1 đến n.
  • Với mỗi số k, nếu prime(k) trả về True thì in ra k.
  • 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ợp n < 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

 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]
print(tongduong(A))
print(tongduong(B))
print(B)
 Giải thích
  • tongduong(A):
    • Các số dương là 2, 5, 10
    • Tổng = 2 + 5 + 10 = 17
  • tongduong(B):
    • Các số dương là 1, 8, 2
    • Tổng = 1 + 8 + 2 = 11
  • print(B):
    • Hàm tongduong() không thay đổi danh sách B, chỉ tính tổng các số dương.
    • Vì vậy B vẫn là:

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.

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
 Giải thích
  • 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).

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.

print(f_dem("Mùa thu lịch sử", ""))
# 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ên split("-") 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ử", " ")4
  • f_dem("Mùa thu lịch sử", "-")1
  def f_dem(msg, sep):
xlist = msg.split(sep)
return len(xlist)
Giải thích
  • msg: chuỗi cần xử lý.
  • sep: ký tự hoặc chuỗi dùng để tách.
  • msg.split(sep): tách chuỗi msg thành một danh sách theo sep.
  • 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"

 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
Giải thích
  • 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

Câu 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).
def power(a, b, c):
return (a + b) ** c
Câu 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 các số này. Yêu cầu sử dụng hàm khi viết chương trình.
def tong(a, b):
return a + b
s = input("Nhập hai số tự nhiên cách nhau bởi dấu cách: ")
lst = s.split()
a = int(lst[0])
b = int(lst[1])
print("Tổng =", tong(a, b))

VẬN DỤNG

Câu 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 (UCLN) của hai số. Yêu cầu sử dụng hàm khi viết chương trình.  
def ucln(a, b):
while b != 0:
a, b = b, a % b
return a
s = input("Nhập hai số cách nhau bởi dấu phẩy: ")
lst = s.split(",")
a = int(lst[0])
b = int(lst[1])
print("UCLN:", ucln(a, b))
Giải thích
  • ucln(a, b): sử dụng thuật toán Euclid để tìm Ước chung lớn nhất (UCLN).
  • while b != 0: lặp cho đến khi b bằng 0.
  • a, b = b, a % b: cập nhật hai số theo thuật toán Euclid.
  • return a: khi vòng lặp kết thúc, a chính là UCLN.
  • split(","): tách hai số được nhập bằng dấu phẩy.
  • int(): chuyển chuỗi sang số nguyên.

Câu 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 ki tự họ ten là chữ in hoa nếu c = 0. Nếu tham số c khá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.
def change(ho_ten, c): if c == 0: return ho_ten.upper() else: return ho_ten.lower()
Giải thích
  • ho_ten: chuỗi cần chuyển đổi. 
  • c: tham số điều khiển. 
  • Nếu c == 0 → trả về chuỗi viết hoa toàn bộ (upper()). 
  • Ngược lại → trả về chuỗi viết thường toàn bộ (lower()).
Fascinating blue spiral design with intricate geometric patterns.

"Tham số là cầu nối giữa dữ liệu và hàm – hiểu rõ để viết chương trình linh hoạt!"

 

Bài cũ hơn Bài mới hơn
Đọc tiếp:
Lên đầu trang