Giải bài tập SGK: Bài 26: Hàm trong Python – Tin học 10

Mục lục [Ẩn]

Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó

Câu hỏi mở đầu trang 127

Câu hỏi mở đầu

Đề bài: Em có thể kể tên một số hàm trong số các lệnh đã học hay không? Các hàm đó có những đặc điểm chung gì?

Lời giải:

  • Một số hàm đã học: print(), input(), int(), float(), str(), len(), type(), range(), list(), abs(), round(),…
  • Đặc điểm chung của các hàm:
    • Đều có dấu mở đóng ngoặc ( ) đi sau tên hàm.
    • Bên trong ngoặc có thể có tham số (số, biến, biểu thức,…) hoặc có thể bỏ trống.
    • Mỗi hàm thực hiện một công việc cụ thể (in ra, nhập vào, chuyển đổi kiểu, đếm độ dài,…).

1. Một số hàm thiết kế sẵn của Python

Hoạt động 1 trang 127

Đề bài: Quan sát một số câu lệnh trong Bảng 26.1 và cho biết những câu lệnh này có điểm chung gì.

Bảng 26.1. Một số lệnh trong Python: abs(), len(), range(), bool(), float(), list(), round(), chr(), input(), ord(), str(), divmod(), int(), print(), type().

Lời giải:

Các câu lệnh trong Bảng 26.1 có những điểm chung:

  • Đều có dấu mở đóng ngoặc ( ) ngay sau tên lệnh.
  • Bên trong dấu ngoặc có thể có tham số (đại lượng, biến hoặc biểu thức), cũng có thể bỏ trống.
  • Đều là các hàm thiết kế sẵn của Python, cho phép người dùng tuỳ ý sử dụng trong chương trình.

Câu hỏi củng cố mục 1 trang 128

Đề bài: Mô tả tham số và giá trị trả lại của mỗi hàm sau: float(), str(), len(), list().

Lời giải:

Hàm Tham số Giá trị trả lại
float() Số nguyên hoặc xâu kí tự chứa số. Số thực tương ứng.
str() Số nguyên, số thực hoặc giá trị bất kì. Xâu kí tự tương ứng.
len() Xâu kí tự hoặc danh sách. Số nguyên là độ dài của xâu/danh sách.
list() Xâu kí tự hoặc một dãy có thể duyệt. Danh sách tương ứng.

Ví dụ minh hoạ:

>>> float("3.14")    # → 3.14
>>> str(2025)        # → '2025'
>>> len("Hello")     # → 5
>>> list("abc")      # → ['a', 'b', 'c']

2. Thiết lập các hàm tự định nghĩa

Hoạt động 2 trang 128

Đề bài: Quan sát các ví dụ sau để biết cách viết hàm.

Lời giải:

Qua hai ví dụ trong SGK, ta có hai cách viết hàm:

Cách 1 – Hàm có trả lại giá trị (dùng return <giá trị>):

>>> def inc(n):
        return n+1
>>> inc(3)
4
  • Tên hàm: inc, tham số: $n$, giá trị trả lại: $n + 1$.

Cách 2 – Hàm không trả lại giá trị (dùng return không có giá trị hoặc bỏ luôn):

>>> def thong_bao(msg):
        print("Xin chào bạn", msg)
        return
>>> thong_bao("Trần Quang Minh")
Xin chào bạn Trần Quang Minh
  • Tên hàm: thong_bao, tham số: xâu msg, giá trị trả lại: không có.

Chú ý:

  • Hàm bắt đầu bằng từ khoá def, sau đó là tên hàm và (tham số), kết thúc bằng dấu :.
  • Khối lệnh bên trong hàm phải viết lùi vào và thẳng hàng.

Câu hỏi củng cố mục 2 trang 129

Đề bài: Quan sát các hàm sau, giải thích cách thiết lập và chức năng của mỗi hàm.

a)

def Nhap_xau():
    msg = input("Nhập một xâu: ")
    return msg

b)

def Inday(n):
    for k in range(n):
        print(k, end = " ")

Lời giải:

Hàm a) Nhap_xau():

  • Cách thiết lập: Hàm có trả lại giá trị (có return msg), không có tham số.
  • Chức năng: Yêu cầu người dùng nhập một xâu kí tự từ bàn phím, sau đó trả về xâu đã nhập.

Hàm b) Inday(n):

  • Cách thiết lập: Hàm không trả lại giá trị (không có return), có $1$ tham số là $n$.
  • Chức năng: In ra màn hình các số từ $0$ đến $n – 1$ trên cùng một dòng, mỗi số cách nhau một dấu cách.

Ví dụ: Gọi Inday(5) sẽ in ra 0 1 2 3 4.

Thực hành trang 129 – 130

Nhiệm vụ 1 trang 129

Đề bài: Viết hàm 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.

Hướng dẫn thực hành:

Ý tưởng: Tạo hàm meeting() không có tham số. Trong hàm: nhập họ tên rồi in ra lời chào.

def meeting():
    ten = input("Nhập họ tên của em: ")
    print("Xin chào ", ten)

meeting()

Ví dụ khi chạy:

Nhập họ tên của em: Nguyễn Văn An
Xin chào  Nguyễn Văn An

Chú ý: Dòng cuối meeting()lệnh gọi hàm — phải có dòng này thì hàm mới được thực thi.

Nhiệm vụ 2 trang 129 – 130

Đề bài: Viết hàm prime(n) với tham số là số tự nhiên $n$ và trả lại True nếu $n$ là số nguyên tố, trả lại False nếu $n$ không phải là số nguyên tố.

Hướng dẫn thực hành:

Ý tưởng:

  • Số nguyên tố là số tự nhiên lớn hơn $1$, không có ước nào ngoài $1$ và chính nó.
  • Để kiểm tra $n$ có là số nguyên tố không, ta đếm số ước thực sự của $n$ (các số từ $1$ đến $n – 1$ mà $n$ chia hết).
  • Biến $C$ đếm số ước thực sự. Nếu $C = 1$ (chỉ có ước là $1$) thì $n$ là 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

Ví dụ kiểm tra:

>>> prime(7)
True
>>> prime(9)
False

Giải thích với $n = 7$: Duyệt $k$ từ $1$ đến $6$. Chỉ có $k = 1$ là ước của $7$ → $C = 1$ → trả về True.

Giải thích với $n = 9$: Duyệt $k$ từ $1$ đến $8$. Có $k = 1$ và $k = 3$ là ước của $9$ → $C = 2$ → trả về False.

Luyện tập trang 130

Luyện tập 1 trang 130

Đề bài: 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.

Lời giải:

Ý tưởng: Duyệt $k$ từ $2$ đến $n$, nếu $k$ là ước của $n$ ($n \% k == 0$) đồng thời $k$ là số nguyên tố (prime(k) trả về True) thì in $k$ ra.

def uoc_nguyen_to(n):
    for k in range(2, n+1):
        if n%k == 0 and prime(k):
            print(k, end=" ")

Ví dụ khi chạy:

>>> uoc_nguyen_to(60)
2 3 5

Giải thích: Các ước của $60$ là $1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60$. Trong số đó, các số nguyên tố là $2, 3, 5$.

Chú ý: Cần định nghĩa trước hàm prime(n) rồi mới gọi nó trong hàm uoc_nguyen_to(n).

Luyện tập 2 trang 130

Đề bài: Viết hàm numbers(s) đếm số các chữ số có trong xâu $s$. Ví dụ numbers("0101abc") = 4.

Lời giải:

Ý tưởng: Duyệt từng kí tự của xâu $s$, kiểm tra xem kí tự đó có là chữ số không (dùng toán tử in với xâu "0123456789"). Nếu có thì tăng biến đếm.

def numbers(s):
    dem = 0
    for ch in s:
        if ch in "0123456789":
            dem = dem + 1
    return dem

Ví dụ kiểm tra:

>>> numbers("0101abc")
4
>>> numbers("Tin học 10")
2

Giải thích với "0101abc": Có $4$ kí tự là chữ số: '0', '1', '0', '1' → trả về $4$. ✓

Vận dụng trang 130

Vận dụng 1 trang 130

Đề bài: Trong khi viết hàm có thể có nhiều lệnh return. Quan sát hàm sau và giải thích ý nghĩa của những lệnh return. Hàm này có điểm gì khác so với hàm prime() đã được mô tả trong phần thực hành.

def prime(n):
    if n < 2:
        return False
    C = 0
    k = 2
    while k < n:
        if n%k == 0:
            return False
        k = k + 1
    return True

Lời giải:

Ý nghĩa của các lệnh return trong hàm:

Lệnh return Vị trí Ý nghĩa
return False (lần 1) Khi $n < 2$ $n$ không thoả mãn điều kiện số nguyên tố → trả về False ngay, kết thúc hàm.
return False (lần 2) Khi tìm thấy ước $k$ ($2 \leq k < n$) Phát hiện $n$ có ước thực sự khác $1$ → không phải nguyên tố → trả về False ngay.
return True Sau vòng while Duyệt hết mà không tìm thấy ước → $n$ là số nguyên tố → trả về True.

So sánh với hàm prime() trong phần thực hành:

Tiêu chí Hàm prime() ở thực hành Hàm prime() ở đây
Cách kiểm tra Đếm số ước thực sự, so sánh $C == 1$. Dừng ngay khi tìm thấy ước hoặc khi $n < 2$.
Hiệu quả Phải duyệt hết các giá trị từ $1$ đến $n – 1$. Nhanh hơn vì có thể dừng giữa chừng nhờ return False.
Cách dùng return Chỉ dùng $1$ lệnh return ở cuối. Dùng nhiều lệnh return ở các vị trí khác nhau.

Kết luận: Hàm này tối ưu hơn vì kết thúc sớm ngay khi xác định được kết quả.

Vận dụng 2 trang 130

Đề bài: 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.

Lời giải:

Ý tưởng:

  • Viết hàm dem_chu_so(s) đếm các kí tự thuộc xâu "0123456789".
  • Viết hàm dem_chu_cai(s) đếm các kí tự thuộc xâu chứa toàn bộ chữ cái tiếng Anh (cả chữ thường và chữ hoa).
  • Trong chương trình chính, nhập xâu rồi gọi hai hàm này.
def dem_chu_so(s):
    dem = 0
    for ch in s:
        if ch in "0123456789":
            dem = dem + 1
    return dem

def dem_chu_cai(s):
    chu_cai = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    dem = 0
    for ch in s:
        if ch in chu_cai:
            dem = dem + 1
    return dem

# Chương trình chính
s = input("Nhập một xâu kí tự: ")
print("Tổng số chữ số:", dem_chu_so(s))
print("Tổng số chữ cái tiếng Anh:", dem_chu_cai(s))

Ví dụ khi chạy (nhập "Tin hoc lop 10A2"):

Nhập một xâu kí tự: Tin hoc lop 10A2
Tổng số chữ số: 3
Tổng số chữ cái tiếng Anh: 10

Kiểm tra:

  • Chữ số: 1, 0, 2 → $3$ chữ số. ✓
  • Chữ cái tiếng Anh: T, i, n, h, o, c, l, o, p, A → $10$ chữ cái. ✓

Chú ý: Chữ cái có dấu tiếng Việt (như ô, ơ, ư) không tính vì đề bài chỉ yêu cầu chữ cái tiếng Anh.

Thầy Phạm Thành Danh

Thầy Phạm Thành Danh

(Người kiểm duyệt, ra đề)

Chức vụ: Trưởng ban biên soạn môn Tin Học THPT

Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1

Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa