Giải Tin Học 10 trang 130

Lời giải chi tiết SGK Lớp 10 · Môn Tin Học · Trang 130–131

Tóm tắt lý thuyết

Có hai kiểu cú pháp thiết lập hàm:

1. Hàm có trả lại giá trị (cần có return ):

def ():
    
    return 

Hàm sẽ kết thúc ngay khi gặp return và trả lại giá trị kèm theo.

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

def ():
    
    return

Điểm cần ghi nhớ:

  • Muốn hàm trả lại giá trị thì return phải đi kèm .
  • Hàm không trả lại giá trị thì return không cần giá trị, hoặc không cần return.

Hoạt động: 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
  • Hàm Nhap_xau() không có tham số.
  • Yêu cầu người dùng nhập một xâu, lưu vào biến msg.
  • Có lệnh return msg nên đây là hàm trả lại giá trị (trả về xâu vừa nhập).

b)

def Inday(n):
    for k in range(n):
        print(k, end = " ")
  • Hàm Inday(n) có một tham số n.
  • In ra các số từ 0 đến n−1 trên một dòng, cách nhau bởi dấu cách.
  • Không có lệnh return nên đây là hàm không trả lại giá trị (chỉ thực hiện việc in).

THỰC HÀNH

Nhiệm vụ 1: Hàm chào hỏ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.

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

meeting()

Đây là hàm không trả lại giá trị, chỉ nhập tên và in lời chào.

Nhiệm vụ 2: Hàm prime(n) kiểm tra số nguyên tố

Đề: Viết hàm prime(n) trả lại True nếu n là số nguyên tố, ngược lại trả False.

Ý tưởng: Đếm số ước thực sự của n (từ 1 đến n−1) bằng biến C. 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

Giải thích: với mỗi k từ 1 đến n−1, nếu k là ước của n thì tăng C. Số nguyên tố lớn hơn 1 chỉ có đúng một ước trong khoảng đó là số 1, nên C = 1.


LUYỆN TẬP

Bài 1: In các ước nguyên tố của n

Đề: 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 ý: dùng hàm prime().

Lời giải:

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

def uoc_nguyen_to(n):
    print("Các ước nguyên tố của", n, "là:", end=" ")
    for k in range(2, n + 1):
        if n % k == 0 and prime(k):
            print(k, end=" ")

# Ví dụ
uoc_nguyen_to(60)   # Kết quả: 2 3 5

Giải thích: Ta duyệt mọi k từ 2 đến n. Nếu k vừa là ước của n (n % k == 0) vừa là số nguyên tố (prime(k) trả True) thì k là ước nguyên tố và được in ra. Ví dụ 60 = 2²·3·5 nên ước nguyên tố là 2, 3, 5.

Bài 2: Hàm numbers(s) đếm chữ số trong xâu

Đề: 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:

def numbers(s):
    dem = 0
    for ch in s:
        if ch.isdigit():   # kiểm tra ch có phải chữ số 0-9 không
            dem = dem + 1
    return dem

# Ví dụ
print(numbers("0101abc"))   # Kết quả: 4

Giải thích: Duyệt từng kí tự ch trong xâu. Phương thức ch.isdigit() trả True nếu ch là chữ số. Với "0101abc" có bốn chữ số 0, 1, 0, 1 nên kết quả là 4.


VẬN DỤNG

Bài 1: Giải thích hàm prime(n) có nhiều lệnh return

Đề: Quan sát hàm sau, giải thích ý nghĩa các lệnh return. Hàm này khác gì so với hàm prime() 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

Giải thích ý nghĩa từng lệnh return:

Lệnh returnKhi nào xảy raÝ nghĩa
return False (đầu)Khi n < 2Số nhỏ hơn 2 chắc chắn không phải số nguyên tố, kết thúc hàm ngay
return False (trong while)Khi tìm thấy một ước k (n % k == 0)Vừa tìm thấy ước thực sự nên n không nguyên tố, dừng luôn
return True (cuối)Khi vòng lặp chạy hết mà không gặp ước nàon là số nguyên tố

Điểm khác so với hàm prime() ở thực hành:

  • Hàm thực hành duyệt hết từ 1 đến n−1 để đếm số ước rồi mới kết luận → chậm hơn.
  • Hàm này dùng return để thoát ngay khi phát hiện một ước, không cần duyệt tiếp → nhanh và hiệu quả hơn. Nó cũng xử lý riêng trường hợp n < 2.

Điều này cho thấy một hàm có thể có nhiều lệnh return; lệnh return nào thực hiện trước sẽ kết thúc hàm tại đó.

Bài 2: Đếm chữ số và chữ cái tiếng Anh trong xâu

Đề: Nhập một xâu kí tự rồi thông báo:

  • Tổng số kí tự là chữ số của xâu.
  • Tổng số kí tự là chữ cái tiếng Anh trong xâu.

Viết hàm cho mỗi yêu cầu.

Lời giải:

def dem_chu_so(s):
    dem = 0
    for ch in s:
        if ch.isdigit():           # ch là chữ số 0-9
            dem = dem + 1
    return dem

def dem_chu_cai(s):
    dem = 0
    for ch in s:
        if ('a' <= ch <= 'z') or ('A' <= ch <= 'Z'):   # chữ cái tiếng Anh
            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))

Giải thích:

  • Hàm dem_chu_so dùng isdigit() để đếm các kí tự chữ số.
  • Hàm dem_chu_cai kiểm tra kí tự nằm trong khoảng az hoặc AZ để chỉ tính chữ cái tiếng Anh (không tính chữ số hay kí tự đặc biệt).

Ví dụ với xâu "Tin10hoc!": có 2 chữ số (1, 0) và 6 chữ cái (T, i, n, h, o, c).


Em muốn mình giải thích kỹ hơn phần nào, hay chạy thử thêm ví dụ cho hàm nào không?

Chế độ đọc sách →