Trắc nghiệm Tin học 10 (Bài 24 - 27)
PHẦN I. TRẮC NGHIỆM NHIỀU LỰA CHỌN
Bài 24: Xâu kí tự
Câu 1: Trong Python, chỉ số của phần tử đầu tiên trong một xâu kí tự bắt đầu từ mấy?
A. 1
B. 0
C. -1
D. Không xác định
Câu 2: Lệnh nào sau đây được sử dụng để tính độ dài (số lượng kí tự) của một xâu?
A. len()
B. length()
C. size()
D. count()
Câu 3: Khẳng định nào sau đây là đúng khi nói về tính chất của xâu kí tự trong Python?
A. Có thể thay đổi từng kí tự của xâu thông qua chỉ số.
B. Không cho phép thay đổi từng kí tự của một xâu.
C. Xâu là một dạng danh sách (list) có thể thêm bớt kí tự thoải mái.
D. Xâu chỉ chứa các kí tự chữ cái, không chứa chữ số.
Câu 4: Toán tử nào được sử dụng để kiểm tra một xâu con có nằm trong một xâu khác hay không?
A. has
B. contains
C. in
D. ==
Câu 5: Để duyệt từng kí tự của xâu s theo chỉ số từ đầu đến cuối, ta dùng cấu trúc vòng lặp nào?
A. for i in s:
B. for i in range(len(s)):
C. for i in range(s):
D. while i in s:
Câu 6: Cho đoạn lệnh sau, kết quả in ra màn hình là gì?
s = "Thời khoá biểu"
print(s[0])
A. h
B. T
C. t
D. Báo lỗi
Câu 7: Biểu thức logic "abc" in "abcd" sẽ trả về kết quả nào sau đây?
A. True
B. False
C. 1
D. 0
Câu 8: Tại sao đoạn lệnh sau lại gây ra lỗi (TypeError)?
s = "abc"
s[0] = "A"
A. Vì xâu s chưa được khai báo độ dài.
B. Vì Python không phân biệt chữ hoa, chữ thường.
C. Vì đối tượng xâu (str) không hỗ trợ việc gán/thay đổi giá trị của từng phần tử.
D. Vì chỉ số 0 nằm ngoài phạm vi của xâu.
Câu 9: Sau khi thực hiện các lệnh sau, biến skq có giá trị bao nhiêu?
s = "81723"
skq = ""
for ch in s:
if int(ch) % 2 != 0:
skq = skq + ch
A. "82"
B. "173"
C. "81723"
D. "2"
Câu 10: Cho xâu s1 = "abc" và s2 = "ababcabca". Biểu thức s1 + s1 in s2 sẽ cho kết quả là gì?
A. False
B. True
C. Báo lỗi
D. "abcabc"
Bài 25: Một số lệnh làm việc với xâu kí tự
Câu 11: Lệnh find() trong Python có chức năng gì?
A. Tìm tất cả các vị trí của xâu con trong xâu mẹ.
B. Tìm vị trí xuất hiện đầu tiên của xâu con trong xâu mẹ.
C. Xoá xâu con khỏi xâu mẹ.
D. Thay thế xâu con trong xâu mẹ.
Câu 12: Nếu lệnh find() không tìm thấy xâu con trong xâu mẹ, nó sẽ trả về giá trị nào?
A. 0
B. False
C. None
D. -1
Câu 13: Phương thức nào dùng để tách một xâu thành danh sách các từ?
A. join()
B. find()
C. slice()
D. split()
Câu 14: Nếu không truyền kí tự phân tách vào lệnh split(), Python sẽ mặc định dùng kí tự nào để tách xâu?
A. Dấu phẩy (,)
B. Dấu cách (space)
C. Dấu chấm (.)
D. Dấu chấm phẩy (;)
Câu 15: Lệnh join() có tác dụng gì?
A. Nối các phần tử của danh sách thành một xâu.
B. Tách một xâu thành một danh sách.
C. Nối hai xâu kí tự lại với nhau.
D. Tìm kiếm một chuỗi trong danh sách.
Câu 16: Cho xâu s = "ab bc cd 123 456 00". Lệnh s.find("12") sẽ trả về giá trị nào?
A. 8
B. 9
C. 10
D. -1
Câu 17: Biểu thức "010" in "1101" sẽ trả về kết quả gì?
A. True
B. False
C. 1
D. -1
Câu 18: Cho đoạn lệnh s = "Tiên học lễ hậu học văn". Kết quả của lệnh s.split() là gì?
A. "Tiên", "học", "lễ", "hậu", "học", "văn"
B. ['Tiên', 'học', 'lễ', 'hậu', 'học', 'văn']
C. ['Tiên học lễ', 'hậu học văn']
D. Báo lỗi
Câu 19: Biểu thức "ababababab".find("ab", 4) trả lại giá trị bao nhiêu?
A. 0
B. 2
C. 4
D. -1
Câu 20: Cho danh sách \(A = ['1', '2', '3', '4']\). Đoạn lệnh nào sau đây tạo ra xâu "1-2-3-4"?
A. A.join("-")
B. split("-", A)
C. "-".join(A)
D. A.split("-")
Bài 26: Hàm trong Python
Câu 21: Trong Python, từ khoá nào được sử dụng để bắt đầu định nghĩa một hàm?
A. function
B. void
C. def
D. return
Câu 22: Cú pháp chung của câu lệnh gọi hàm trong Python là gì?
A. <tên hàm> = <danh sách tham số>
B. <danh sách tham số>(<tên hàm>)
C. <tên hàm>(<danh sách tham số>)
D. call <tên hàm>(<danh sách tham số>)
Câu 23: Khẳng định nào sau đây đúng về lệnh return trong hàm?
A. Một hàm bắt buộc phải có lệnh return.
B. Lệnh return chỉ có thể trả về kiểu số nguyên.
C. Hàm luôn phải trả về một giá trị cụ thể sau lệnh return.
D. Hàm có thể có hoặc không có giá trị trả lại sau lệnh return.
Câu 24: Hàm nào sau đây không phải là hàm thiết kế sẵn (built-in function) của Python?
A. abs()
B. len()
C. int()
D. prime()
Câu 25: Khối lệnh mô tả hàm được viết như thế nào so với dòng khai báo def?
A. Viết ngang hàng với từ khóa def.
B. Viết trong cặp dấu ngoặc nhọn {}.
C. Viết sau dấu : và viết lùi vào, thẳng hàng.
D. Viết tùy ý, không cần lùi dòng.
Câu 26: Hàm thiết kế sẵn type(y) thực hiện công việc gì?
A. Ép kiểu biến y sang kiểu số nguyên.
B. Nhập giá trị cho biến y từ bàn phím.
C. Trả lại kiểu dữ liệu của biến y.
D. In giá trị của biến y ra màn hình.
Câu 27: Cho hàm định nghĩa như sau:
def Inday(n):
for k in range(n):
print(k, end=" ")
Chức năng của hàm này là gì?
A. In ra màn hình các số từ 1 đến n.
B. In ra màn hình các số từ 0 đến \(n-1\) trên cùng một dòng.
C. Tính tổng các số từ 0 đến \(n-1\).
D. Yêu cầu người dùng nhập vào n số.
Câu 28: Trong một hàm, khi gặp câu lệnh return thì điều gì sẽ xảy ra?
A. Hàm sẽ tiếp tục chạy các lệnh bên dưới lệnh return.
B. Hàm sẽ khởi động lại từ đầu.
C. Báo lỗi nếu đây là hàm không trả lại giá trị.
D. Hàm kết thúc ngay lập tức và trả lại giá trị (nếu có).
Câu 29: Cho đoạn mã sau:
def inc(n):
return n + 1
Kết quả in ra của lệnh print(inc(3)) là gì?
A. 3
B. 4
C. n+1
D. Báo lỗi
Câu 30: Trong thuật toán kiểm tra số nguyên tố bằng hàm def prime(n):, ý nghĩa của lệnh return False khi phát hiện n chia hết cho một số k là gì?
A. Bỏ qua số k hiện tại và tiếp tục vòng lặp.
B. Kết thúc hàm ngay lập tức và khẳng định n không phải số nguyên tố.
C. Gán giá trị False cho biến k.
D. Kết thúc chương trình hoàn toàn.
Bài 27: Tham số của hàm
Câu 31: Các biến được định nghĩa bên trong cặp dấu ngoặc ở dòng khai báo hàm (ví dụ: def f(a, b, c):) được gọi là gì?
A. Tham số (parameter)
B. Đối số (argument)
C. Biến cục bộ
D. Biến toàn cục
Câu 32: Các giá trị cụ thể hoặc biến đã có giá trị được truyền vào khi gọi hàm (ví dụ: f(1, 2, 3)) được gọi là gì?
A. Tham số (parameter)
B. Đối số (argument)
C. Hàm con
D. Chỉ số
Câu 33: Khi gọi hàm, các tham số sẽ được truyền giá trị thông qua đối số tương ứng theo quy tắc nào?
A. Giá trị đối số truyền ngẫu nhiên vào các tham số.
B. Đối số kiểu số truyền trước, kiểu chữ truyền sau.
C. Giá trị được truyền vào hàm bằng với số tham số trong khai báo của hàm.
D. Chỉ truyền được đối số là số nguyên.
Câu 34: Một trong những lợi ích lớn nhất của việc sử dụng hàm (chương trình con) trong lập trình là gì?
A. Làm cho chương trình chạy nhanh hơn gấp nhiều lần.
B. Tránh được mọi lỗi cú pháp khi gõ code.
C. Giúp cấu trúc chương trình rõ ràng, dễ hiểu hơn và dễ dàng tái sử dụng.
D. Giảm dung lượng ổ cứng của máy tính.
Câu 35: Cho hàm def f_sum(a, b, c):. Lệnh gọi hàm nào sau đây là sai cú pháp?
A. f_sum(10, 5, 2)
B. x, y, z = 1, 2, 3; f_sum(x, y, z)
C. f_sum(1, 2)
D. f_sum(a=1, b=2, c=3)
Câu 36: Cho định nghĩa hàm def f(a, b, c): return a+b+c và lệnh gán x, y, z = 10, 20, 5. Lệnh f(x, y, z) sẽ truyền giá trị như thế nào?
A. Biến x truyền vào tham số a, y vào b, z vào c. Kết quả hàm trả về là 35.
B. Biến x truyền vào tham số c, y vào b, z vào a.
C. Lệnh gọi hàm bị lỗi do tên biến truyền vào không trùng với tên tham số (a,b,c).
D. Hàm trả về xâu "10205".
Câu 37: Đoạn mã f(a, b, c) sẽ báo lỗi NameError: name 'a' is not defined trong trường hợp nào?
A. Hàm f() được khai báo là hàm không trả lại giá trị.
B. Các tham số a, b, c là kí tự chứ không phải số.
C. Hàm f() yêu cầu 4 đối số nhưng chỉ nhận 3.
D. Các biến a, b, c chưa được khởi tạo giá trị trước khi truyền vào hàm như những đối số.
Câu 38: Giả sử hàm f có hai tham số x, y. Khi khai báo, hàm sẽ trả lại giá trị \(x + 2*y\). Nếu gọi hàm f(10, a) khi biến a chưa được định nghĩa thì điều gì sẽ xảy ra?
A. Hàm trả về giá trị 10.
B. Hàm tự gán a = 0 và trả về 10.
C. Lỗi chương trình vì biến a chưa có giá trị.
D. Hàm trả về chuỗi "10 + 2a".
Câu 39: Cho hàm đếm từ như sau:
def f_dem(msg, sep):
xlist = msg.split(sep)
return len(xlist)
Giá trị của lệnh f_dem("Mùa thu lịch sử", " ") là bao nhiêu?
A. 3
B. 4
C. 16
D. 1
Câu 40: Cho hàm tính tổ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
Với \(A = [1, -2, 3]\) và \(b = 1\), kết quả của f_sum(A, b) là bao nhiêu?
A. 2 (tổng tất cả)
B. 4 (chỉ tính tổng số dương)
C. 0
D. -2
PHẦN II. TRẮC NGHIỆM ĐÚNG/SAI
Câu 41: Về cấu trúc và tính chất của xâu kí tự trong Python (Bài 24).
a) Xâu kí tự trong Python là một dãy các kí tự Unicode.
b) Người lập trình có thể thay đổi từng kí tự của một xâu thông qua chỉ số (ví dụ: s[0] = "A").
c) Chỉ số của xâu kí tự bắt đầu từ 0 đến len(s) - 1.
d) Có hai cách để duyệt từng kí tự của xâu: duyệt theo chỉ số và duyệt theo phần tử của xâu.
Câu 42: Về một số lệnh làm việc với xâu kí tự (Bài 25).
a) Lệnh find() sẽ trả về giá trị -1 nếu không tìm thấy xâu con trong xâu mẹ.
b) Lệnh split() mặc định sử dụng kí tự dấu phẩy (,) để phân tách các từ trong xâu.
c) Cú pháp đúng của lệnh find là: <xâu mẹ>.find(<xâu con>).
d) Lệnh join() có tác dụng nối các phần tử (là các xâu) của một danh sách thành một xâu duy nhất.
Câu 43: Về cách thiết lập hàm tự định nghĩa trong Python (Bài 26).
a) Hàm trong Python được bắt đầu định nghĩa bằng từ khoá def.
b) Một hàm tự định nghĩa luôn luôn phải có kết quả trả lại thông qua lệnh return.
c) Các câu lệnh mô tả phần thân của hàm phải được viết lùi lề vào trong và thẳng hàng so với từ khóa def.
d) Lệnh int() và len() là các hàm do người dùng tự định nghĩa.
Câu 44: Về tham số và đối số của hàm (Bài 27).
a) Tham số (parameter) của hàm được định nghĩa bên trong dấu ngoặc tròn khi khai báo hàm.
b) Đối số (argument) là các giá trị thực tế được truyền vào hàm tại thời điểm gọi hàm.
c) Số lượng đối số truyền vào hàm có thể nhiều hơn hoặc ít hơn số lượng tham số đã khai báo.
d) Đối số truyền vào hàm có thể là các hằng số cụ thể (như 10, "Hello") hoặc các biến đã được gán giá trị.
PHẦN III. TỰ LUẬN (ĐIỀN KHUYẾT CHƯƠNG TRÌNH)
Câu 45: Cho đoạn chương trình Python dưới đây với mục đích đếm số lượng kí tự là chữ số (từ '0' đến '9') có trong xâu kí tự S được nhập từ bàn phím. Hãy điền các biến/giá trị thích hợp vào các chỗ trống (1), (2), (3) để chương trình hoạt động đúng.
S = input("Nhập một xâu kí tự: ")
dem = 0
for ch in ____(1)____:
if ch in "0123456789":
dem = dem + ____(2)____
print("Tổng số các kí tự là chữ số của xâu là:", ____(3)____)
Câu 46: Cho đoạn mã nguồn thiết lập hàm tongduong(A) để tính tổng các phần tử lớn hơn 0 trong danh sách A. Hãy điền các từ/biến thích hợp vào các chỗ trống (1), (2), (3) để hoàn thiện chương trình con này.
def tongduong(____(1)____):
S = 0
for k in A:
# Kiểm tra điều kiện số hạng dương
if k > ____(2)____:
S = S + k
# Trả lại giá trị tính được
return ____(3)____
# Khai báo mảng và in kết quả
A = [0, 2, -1, 5, 10, -3]
print(tongduong(A))
Câu 47: Cho bài toán nhập vào số lượng học sinh và họ tên của từng học sinh. Hãy viết chương trình đếm xem trong danh sách lớp có bao nhiêu bạn tên là "Hương". Em hãy điền đoạn mã thích hợp vào các chỗ trống (...) để hoàn thiện chương trình sau.
n = int(input("Nhập số lượng học sinh trong lớp: "))
ds_lop = []
for i in range(n):
hoten = input("Nhập họ tên học sinh thứ " + str(i+1) + ": ")
ds_lop.___(1)___(hoten)
dem = 0
for ten in ds_lop:
if "Hương" ___(2)___ ten:
dem = ___(3)___
print("Số lượng học sinh tên Hương trong lớp là:", dem)
Câu 48: Cho một xâu kí tự chứa danh sách các con vật được ngăn cách nhau bởi dấu phẩy: s = "gà,vịt,chó,lợn,ngựa,cá". Cần viết một chương trình để xoá các dấu "," và thay thế bằng dấu cách " ". Em hãy điền vào chỗ trống để hoàn thiện mã nguồn.
s = "gà,vịt,chó,lợn,ngựa,cá"
danh_sach_tu = s.___(1)___
xau_ket_qua = ___(2)___.join(___(3)___)
print("Xâu sau khi thay thế là:", xau_ket_qua)
Câu 49: Dựa vào ý tưởng đếm số chữ số trong xâu, hãy viết một hàm có tên kiem_tra_chu_so(s) nhận vào một xâu s. Hàm này sẽ kiểm tra xem xâu s có chứa bất kì chữ số nào (từ "0" đến "9") hay không. Nếu có trả về True, nếu không có trả về False. Hãy điền vào chỗ trống.
def kiem_tra_chu_so(s):
for ch in s:
if "0" <= ch <= "9":
___(1)___ True
___(2)___ False
xau_nhap = input("Nhập một xâu bất kì: ")
if ___(3)___ == True:
print("Xâu vừa nhập CÓ chứa chữ số.")
else:
print("Xâu vừa nhập KHÔNG chứa chữ số.")
Câu 50: Viết một chương trình sử dụng hàm tinh_tong_dieu_kien(A, loai) để tính tổng các số trong danh sách A dựa theo tham số loai. Nếu loai == 0, hàm tính tổng các số chẵn. Nếu loai == 1, hàm tính tổng các số lẻ. Hãy điền vào chỗ trống.
def tinh_tong_dieu_kien(A, ___(1)___):
S = 0
for x in A:
if loai == 0:
if x % 2 == 0:
S = S + ___(2)___
else:
if x % 2 != 0:
S = S + x
___(3)___ S
day_so = [1, 2, 3, 4, 5, 6, 7, 8, 9]
ket_qua = tinh_tong_dieu_kien(day_so, ___(4)___)
print("Tổng các số lẻ trong dãy là:", ket_qua)