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ì
returnphải đi kèm. - Hàm không trả lại giá trị thì
returnkhông cần giá trị, hoặc không cầnreturn.
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 msgnê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
returnnê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 return | Khi nào xảy ra | Ý nghĩa |
|---|---|---|
return False (đầu) | Khi n < 2 | Số 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ào | n 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ợpn < 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_sodùngisdigit()để đếm các kí tự chữ số. - Hàm
dem_chu_caikiểm tra kí tự nằm trong khoảnga–zhoặcA–Zđể 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?
