Bài tập trắc nghiệm Python - Cơ bản
Trang này tổng hợp 200 câu hỏi trắc nghiệm Python cơ bản, sắp xếp theo chủ đề từ dễ đến khó. Mỗi câu có 4 đáp án A/B/C/D.
Chọn một đáp án cho mỗi câu - đáp án đúng/sai và phần giải thích sẽ tự động hiện ra ngay sau khi bạn chọn.
Bạn có thể tải file .pdf ở đây: Bài tập trắc nghiệm Python - Cơ bản
Nhóm 1: Biến và kiểu dữ liệu
Phần tiêu đề “Nhóm 1: Biến và kiểu dữ liệu”Câu 1. Trong Python, để tạo một biến x có giá trị bằng 5, ta viết:
Đáp án: B
Python không cần khai báo kiểu dữ liệu, chỉ cần gán giá trị bằng dấu = là biến được tạo ra.
Câu 2. Kết quả của type(5) là gì?
Đáp án: A
Số nguyên không có phần thập phân trong Python có kiểu int.
Câu 3. Kết quả của type(5.0) là gì?
Đáp án: B
Số có phần thập phân (dù là .0) có kiểu float trong Python.
Câu 4. Kết quả của đoạn code sau là gì?
x = "5"y = 5print(x == y)Đáp án: B
x là chuỗi "5" (kiểu str), y là số 5 (kiểu int). Python so sánh khác kiểu dữ liệu sẽ trả về False chứ không báo lỗi.
Câu 5. Tên biến nào sau đây không hợp lệ trong Python?
Đáp án: C
Tên biến trong Python không được bắt đầu bằng chữ số.
Câu 6. Hàm nào dùng để chuyển một chuỗi số như “10” thành số nguyên?
Đáp án: B
int("10") trả về số nguyên 10. num() không phải hàm có sẵn trong Python.
Câu 7. Kết quả của bool(0) là gì?
Đáp án: B
Số 0 được coi là giá trị “falsy” trong Python, nên bool(0) là False.
Câu 8. Kết quả của bool(“”) (chuỗi rỗng) là gì?
Đáp án: B
Chuỗi rỗng cũng được coi là “falsy” trong Python.
Câu 9. Đoạn code sau in ra gì?
x = 10x = "mười"print(x)Đáp án: B
Python là ngôn ngữ định kiểu động (dynamic typing) - một biến có thể được gán lại với kiểu dữ liệu khác bất cứ lúc nào.
Câu 10. Kết quả của 10 // 3 là gì?
Đáp án: B
// là phép chia lấy phần nguyên (floor division). 10 // 3 = 3.
Nhóm 2: Toán tử số học
Phần tiêu đề “Nhóm 2: Toán tử số học”Câu 11. Kết quả của 10 % 3 là gì?
Đáp án: B
% là toán tử lấy phần dư. 10 % 3 = 1 vì 10 = 3*3 + 1.
Câu 12. Kết quả của 2 ** 3 là gì?
Đáp án: B
** là toán tử luỹ thừa. 2 ** 3 = 2*2*2 = 8.
Câu 13. Kết quả của 7 / 2 trong Python 3 là gì?
Đáp án: B
Trong Python 3, phép chia / luôn trả về kết quả kiểu float, kể cả khi chia hết.
Câu 14. Kết quả của đoạn code sau là gì?
a = 5a += 3print(a)Đáp án: C
a += 3 tương đương a = a + 3, nên a = 5 + 3 = 8.
Câu 15. Toán tử nào có độ ưu tiên cao nhất trong các toán tử sau?
Đáp án: C
Luỹ thừa (**) có độ ưu tiên cao hơn nhân/chia, và nhân/chia cao hơn cộng/trừ.
Câu 16. Kết quả của -7 // 2 là gì?
Đáp án: B
Phép chia lấy phần nguyên trong Python luôn làm tròn xuống (về âm vô cực), nên -7 // 2 = -4.
Câu 17. Kết quả của 3 + 4 * 2 là gì?
Đáp án: B
Nhân được thực hiện trước cộng: 4 * 2 = 8, sau đó 3 + 8 = 11.
Câu 18. Đoạn code sau in ra gì?
x = 5y = 2print(x ** y)Đáp án: B
x ** y là x mũ y: 5 ** 2 = 25.
Câu 19. Hàm nào trả về giá trị tuyệt đối của một số?
Đáp án: A
abs(-5) trả về 5.
Câu 20. Kết quả của round(3.567, 2) là gì?
Đáp án: B
round(số, số_chữ_số_thập_phân) làm tròn 3.567 đến 2 chữ số thập phân, kết quả là 3.57.
Nhóm 3: Toán tử so sánh và logic
Phần tiêu đề “Nhóm 3: Toán tử so sánh và logic”Câu 21. Kết quả của 5 == 5.0 là gì?
Đáp án: A
Python so sánh giá trị, int và float bằng nhau nếu cùng giá trị số học.
Câu 22. Kết quả của not True là gì?
Đáp án: B
not đảo ngược giá trị boolean, not True là False.
Câu 23. Kết quả của (5 > 3) and (2 > 4) là gì?
Đáp án: B
5 > 3 là True, 2 > 4 là False. and yêu cầu cả hai đều True mới cho True.
Câu 24. Kết quả của (5 > 3) or (2 > 4) là gì?
Đáp án: A
or chỉ cần một điều kiện đúng là kết quả True. 5 > 3 là True.
Câu 25. Toán tử nào dùng để kiểm tra hai giá trị khác nhau?
Đáp án: C
!= là toán tử so sánh khác nhau trong Python.
Câu 26. Đoạn code sau in ra gì?
x = 7print(x >= 7 and x <= 10)Đáp án: A
x >= 7 là True, x <= 10 là True, and của hai True là True.
Câu 27. Kết quả của 5 in [1, 2, 3, 4, 5] là gì?
Đáp án: A
Toán tử in kiểm tra một phần tử có tồn tại trong danh sách (list) hay không. 5 có trong list nên kết quả là True.
Câu 28. Kết quả của not (5 > 3) là gì?
Đáp án: B
5 > 3 là True, not True là False.
Câu 29. Đâu là toán tử dùng để kiểm tra hai biến có cùng trỏ tới một đối tượng trong bộ nhớ?
Đáp án: B
is kiểm tra định danh (identity) - hai biến có cùng trỏ đến một đối tượng hay không, khác với == chỉ so sánh giá trị.
Câu 30. Kết quả của đoạn code sau là gì?
a = 5b = 10print(a != b)Đáp án: A
a và b khác giá trị nên a != b là True.
Nhóm 4: Nhập/Xuất dữ liệu (input/print)
Phần tiêu đề “Nhóm 4: Nhập/Xuất dữ liệu (input/print)”Câu 31. Hàm input() trong Python trả về kiểu dữ liệu gì?
Đáp án: C
input() luôn trả về dữ liệu dạng chuỗi (str), dù người dùng nhập số hay chữ.
Câu 32. Để nhập một số nguyên từ bàn phím, ta viết:
Đáp án: B
Cần bọc input() trong int() để chuyển chuỗi nhập vào thành số nguyên.
Câu 33. Đoạn code sau in ra gì?
print("Hello", "World")Đáp án: B
Mặc định, print() nối các đối số bằng khoảng trắng (sep=" ").
Câu 34. Để print() không tự động xuống dòng sau khi in, ta thêm tham số nào?
Đáp án: C
Tham số end mặc định là "\n" (xuống dòng). Đặt end="" để không xuống dòng.
Câu 35. Đoạn code sau in ra gì?
ten = "An"tuoi = 10print(f"Tôi tên {ten}, {tuoi} tuổi")Đáp án: B
f-string (f"...") cho phép chèn giá trị biến trực tiếp vào chuỗi thông qua cặp dấu {}.
Câu 36. Đoạn code sau in ra gì?
print(1, 2, 3, sep="-")Đáp án: B
Tham số sep quy định ký tự phân cách giữa các giá trị được in, ở đây là dấu -.
Câu 37. Lệnh nào sau đây gây lỗi khi người dùng nhập “abc”?
Đáp án: C
int("abc") gây lỗi ValueError vì "abc" không thể chuyển thành số nguyên.
Câu 38. Đoạn code sau in ra gì?
a = "5"b = "3"print(a + b)Đáp án: B
a và b là chuỗi, toán tử + giữa hai chuỗi thực hiện phép nối chuỗi (concatenation), không phải cộng số học.
Câu 39. Cú pháp nào cho phép hiển thị lời nhắc khi gọi input()?
Đáp án: A
Có thể truyền chuỗi lời nhắc trực tiếp làm đối số cho input(), chuỗi này sẽ được hiển thị trước khi người dùng nhập.
Câu 40. Đoạn code sau in ra gì (biết Python định dạng float mặc định)?
print(10 / 4)Đáp án: B
10 / 4 = 2.5, phép chia / trả kết quả kiểu float.
Nhóm 5: Câu lệnh rẽ nhánh if - elif - else
Phần tiêu đề “Nhóm 5: Câu lệnh rẽ nhánh if - elif - else”Câu 41. Từ khoá nào dùng để kiểm tra một điều kiện khác nếu điều kiện if trước đó sai?
Đáp án: C
Python dùng từ khoá elif (viết tắt của “else if”).
Câu 42. Đoạn code sau in ra gì?
x = 7if x > 10: print("Lớn")elif x > 5: print("Trung bình")else: print("Nhỏ")Đáp án: B
x = 7 không lớn hơn 10 nhưng lớn hơn 5, nên nhánh elif x > 5 được thực thi.
Câu 43. Điều gì đặc biệt trong cú pháp khối lệnh if của Python?
Đáp án: B
Python dùng thụt đầu dòng để xác định phạm vi của khối lệnh, thay vì dấu ngoặc như nhiều ngôn ngữ khác.
Câu 44. Đoạn code sau in ra gì?
x = 5if x > 0: if x > 10: print("A") else: print("B")else: print("C")Đáp án: B
x = 5 > 0 đúng nên vào khối if ngoài. Bên trong, x > 10 sai nên vào nhánh else, in ra "B".
Câu 45. Cú pháp if nào sau đây đúng trong Python?
Đáp án: B
Python yêu cầu dấu hai chấm : sau điều kiện if, không dùng dấu ngoặc nhọn hay từ khoá then.
Câu 46. Đoạn code sau in ra gì?
x = 0if x: print("True nhánh")else: print("False nhánh")Đáp án: B
Số 0 được coi là “falsy”, nên if x: (tương đương if bool(x):) đi vào nhánh else.
Câu 47. Toán tử ba ngôi (biểu thức điều kiện trên một dòng) trong Python được viết theo cú pháp nào?
Đáp án: A
Python dùng cú pháp giá_trị_nếu_đúng if điều_kiện else giá_trị_nếu_sai.
Câu 48. Đoạn code sau in ra gì?
x = 15ket_qua = "chẵn" if x % 2 == 0 else "lẻ"print(ket_qua)Đáp án: B
15 % 2 = 1, khác 0 nên điều kiện x % 2 == 0 sai, kết quả là "lẻ".
Câu 49. Nhánh elif có thể xuất hiện bao nhiêu lần trong một khối if?
Đáp án: C
Có thể dùng nhiều elif liên tiếp tuỳ ý để kiểm tra nhiều điều kiện.
Câu 50. Đoạn code sau in ra gì?
diem = 85if diem >= 90: print("Giỏi")elif diem >= 80: print("Khá")elif diem >= 65: print("Trung bình")else: print("Yếu")Đáp án: B
diem = 85 không đủ điều kiện >= 90 nhưng thoả >= 80, nên in ra "Khá".
Nhóm 6: Vòng lặp for
Phần tiêu đề “Nhóm 6: Vòng lặp for”Câu 51. Đoạn code sau in ra gì?
for i in range(5): print(i, end=" ")Đáp án: B
range(5) sinh ra dãy số từ 0 đến 4 (không bao gồm 5).
Câu 52. Đoạn code sau in ra gì?
for i in range(2, 6): print(i, end=" ")Đáp án: A
range(2, 6) sinh dãy số bắt đầu từ 2 đến trước 6, tức 2, 3, 4, 5.
Câu 53. Đoạn code sau in ra gì?
for i in range(0, 10, 2): print(i, end=" ")Đáp án: B
range(bắt_đầu, kết_thúc, bước_nhảy): từ 0 đến trước 10, mỗi lần tăng 2, cho ra 0, 2, 4, 6, 8.
Câu 54. Vòng lặp for trong Python thường được dùng để làm gì?
Đáp án: B
Vòng lặp for trong Python là vòng lặp duyệt qua từng phần tử của một đối tượng có thể lặp (iterable) như list, chuỗi, range, tuple…
Câu 55. Đoạn code sau in ra gì?
for ch in "abc": print(ch, end="-")Đáp án: A
Vòng lặp for có thể duyệt qua từng ký tự của một chuỗi.
Câu 56. Đoạn code sau in ra tổng bằng bao nhiêu?
tong = 0for i in range(1, 5): tong += iprint(tong)Đáp án: A
range(1, 5) là 1, 2, 3, 4. Tổng: 1 + 2 + 3 + 4 = 10.
Câu 57. Từ khoá nào dùng để thoát khỏi vòng lặp for trước khi nó kết thúc tự nhiên?
Đáp án: C
break dừng vòng lặp ngay lập tức, không thực hiện các lần lặp còn lại.
Câu 58. Từ khoá nào dùng để bỏ qua lần lặp hiện tại và tiếp tục với lần lặp kế tiếp?
Đáp án: B
continue bỏ qua phần code còn lại trong lần lặp hiện tại và chuyển sang lần lặp tiếp theo.
Câu 59. Đoạn code sau in ra gì?
for i in range(5): if i == 3: break print(i, end=" ")Đáp án: A
Khi i == 3, break dừng vòng lặp ngay, nên chỉ in 0, 1, 2 trước đó.
Câu 60. Đoạn code sau in ra gì?
for i in range(5): if i == 2: continue print(i, end=" ")Đáp án: A
Khi i == 2, continue bỏ qua lệnh print, các giá trị còn lại vẫn được in bình thường: 0, 1, 3, 4.
Nhóm 7: Vòng lặp while
Phần tiêu đề “Nhóm 7: Vòng lặp while”Câu 61. Vòng lặp while tiếp tục thực hiện khi nào?
Đáp án: B
Vòng lặp while lặp lại các lệnh bên trong chừng nào điều kiện còn đúng (True).
Câu 62. Đoạn code sau in ra gì?
i = 0while i < 3: print(i, end=" ") i += 1Đáp án: A
Vòng lặp chạy khi i < 3: in 0, 1, 2. Khi i = 3, điều kiện sai nên dừng.
Câu 63. Đoạn code nào sau đây gây ra lặp vô hạn?
Đáp án: B
Vòng lặp này không có bước cập nhật biến i, nên i luôn bằng 0 và điều kiện i < 5 luôn đúng, gây lặp vô hạn.
Câu 64. Vòng lặp while True: kết hợp với lệnh nào để có thể dừng lại khi cần?
Đáp án: B
while True: tạo vòng lặp vô hạn, cần dùng break bên trong (thường sau một điều kiện if) để thoát ra.
Câu 65. Đoạn code sau in ra tổng bao nhiêu?
tong = 0i = 1while i <= 5: tong += i i += 1print(tong)Đáp án: B
Vòng lặp cộng dồn 1 + 2 + 3 + 4 + 5 = 15.
Câu 66. Sự khác biệt chính giữa for và while trong Python là gì?
Đáp án: A
for thích hợp khi biết trước số lần lặp hoặc cần duyệt qua tập hợp; while thích hợp khi số lần lặp phụ thuộc vào một điều kiện chưa biết trước.
Câu 67. Đoạn code sau in ra gì?
i = 10while i > 0: if i == 5: break print(i, end=" ") i -= 1Đáp án: A
Khi i giảm dần từ 10, đến khi i == 5 thì break dừng vòng lặp ngay trước khi in 5, nên các giá trị đã in là 10, 9, 8, 7, 6.
Câu 68. while với else trong Python: khối else được thực hiện khi nào?
Đáp án: B
Khối else của while chạy khi vòng lặp kết thúc tự nhiên (điều kiện sai), nhưng không chạy nếu vòng lặp bị dừng bởi break.
Câu 69. Đoạn code sau in ra gì?
dem = 0while dem < 3: dem += 1print(dem)Đáp án: C
dem tăng dần 0, 1, 2, 3. Khi dem = 3, điều kiện dem < 3 sai nên dừng, giá trị cuối cùng là 3.
Câu 70. Đoạn code sau dùng vòng lặp while để làm gì?
while True: try: n = int(input("Nhập số: ")) break except ValueError: print("Không hợp lệ!")Đáp án: B
Vòng lặp lặp lại việc yêu cầu nhập liệu cho đến khi người dùng nhập được một số nguyên hợp lệ, lúc đó break sẽ thoát vòng lặp.
Nhóm 8: Chuỗi (string) cơ bản
Phần tiêu đề “Nhóm 8: Chuỗi (string) cơ bản”Câu 71. Đoạn code sau in ra gì?
s = "Xin chào"print(len(s))Đáp án: B
len() trả về số ký tự trong chuỗi, chuỗi "Xin chào" có 8 ký tự (bao gồm khoảng trắng).
Câu 72. Đoạn code sau in ra gì?
s = "Python"print(s[0])Đáp án: A
Chỉ số (index) trong Python bắt đầu từ 0, nên s[0] là ký tự đầu tiên 'P'.
Câu 73. Đoạn code sau in ra gì?
s = "Python"print(s[-1])Đáp án: B
Chỉ số âm đếm từ cuối chuỗi, s[-1] là ký tự cuối cùng 'n'.
Câu 74. Đoạn code sau in ra gì?
s = "Hello"print(s.upper())Đáp án: B
.upper() trả về chuỗi mới với toàn bộ ký tự viết hoa.
Câu 75. Phương thức nào dùng để nối các phần tử của một list thành một chuỗi?
Đáp án: B
separator.join(list) nối các phần tử của list (dạng chuỗi) lại với nhau, dùng separator làm ký tự phân cách.
Câu 76. Đoạn code sau in ra gì?
s = "Học Python"print(s.split())Đáp án: A
.split() mặc định tách chuỗi thành list các từ dựa vào khoảng trắng.
Câu 77. Đoạn code sau in ra gì?
s = "Python"print(s[1:4])Đáp án: B
Cắt chuỗi (slicing) s[1:4] lấy các ký tự từ chỉ số 1 đến trước chỉ số 4: 'y', 't', 'h' → "yth".
Câu 78. Chuỗi trong Python có thể thay đổi trực tiếp từng ký tự (mutable) hay không?
Đáp án: B
Chuỗi trong Python là kiểu bất biến, không thể gán lại giá trị cho từng ký tự - phải tạo chuỗi mới.
Câu 79. Đoạn code sau in ra gì?
s = " Xin chào "print(s.strip())Đáp án: B
.strip() loại bỏ khoảng trắng thừa ở đầu và cuối chuỗi.
Câu 80. Đoạn code sau in ra gì?
a = "Xin"b = "chào"print(a + " " + b)Đáp án: B
Toán tử + nối các chuỗi lại với nhau theo đúng thứ tự.
Nhóm 9: List cơ bản
Phần tiêu đề “Nhóm 9: List cơ bản”Câu 81. Đoạn code sau in ra gì?
a = [1, 2, 3]print(len(a))Đáp án: B
len() trả về số phần tử trong list, ở đây list a có 3 phần tử.
Câu 82. Phương thức nào dùng để thêm một phần tử vào cuối list?
Đáp án: C
list.append(x) thêm phần tử x vào cuối list.
Câu 83. Đoạn code sau in ra gì?
a = [1, 2, 3]a.append(4)print(a)Đáp án: B
append(4) thêm 4 vào cuối list a.
Câu 84. Đoạn code sau in ra gì?
a = [10, 20, 30]print(a[1])Đáp án: B
Chỉ số bắt đầu từ 0, nên a[1] là phần tử thứ hai: 20.
Câu 85. Phương thức nào dùng để xoá một phần tử theo giá trị trong list?
Đáp án: B
list.remove(giá_trị) xoá phần tử đầu tiên có giá trị bằng tham số truyền vào.
Câu 86. Đoạn code sau in ra gì?
a = [1, 2, 3, 4, 5]print(a[-2])Đáp án: A
Chỉ số -1 là phần tử cuối (5), -2 là phần tử kế cuối (4).
Câu 87. Đoạn code sau in ra gì?
a = [1, 2, 3]b = ab.append(4)print(a)Đáp án: B
b = a không tạo bản sao mới, mà b chỉ là một tên khác tham chiếu tới cùng list với a. Thay đổi qua b cũng ảnh hưởng đến a.
Câu 88. Hàm nào trả về tổng các phần tử số trong một list?
Đáp án: B
sum(list) trả về tổng tất cả các phần tử số trong list.
Câu 89. Đoạn code sau in ra gì?
a = [3, 1, 4, 1, 5]a.sort()print(a)Đáp án: B
.sort() sắp xếp list tại chỗ theo thứ tự tăng dần mặc định.
Câu 90. Đoạn code sau in ra gì?
a = [1, 2, 3]print(3 in a)Đáp án: A
Toán tử in kiểm tra 3 có trong list a hay không - kết quả True.
Nhóm 10: Hàm (function) cơ bản
Phần tiêu đề “Nhóm 10: Hàm (function) cơ bản”Câu 91. Từ khoá nào dùng để định nghĩa một hàm trong Python?
Đáp án: B
Python dùng từ khoá def để khai báo một hàm, ví dụ def ten_ham():.
Câu 92. Đoạn code sau in ra gì?
def cong(a, b): return a + b
print(cong(3, 4))Đáp án: B
Hàm cong trả về tổng hai tham số: 3 + 4 = 7.
Câu 93. Điều gì xảy ra nếu một hàm không có lệnh return?
Đáp án: B
Nếu hàm không có return, giá trị trả về mặc định là None.
Câu 94. Đoạn code sau in ra gì?
def chao(ten="bạn"): print(f"Xin chào, {ten}!")
chao()Đáp án: A
ten="bạn" là giá trị mặc định, được dùng khi gọi hàm mà không truyền tham số.
Câu 95. Tham số của hàm được gọi là gì khi truyền theo đúng tên, ví dụ chao(ten=“An”)?
Đáp án: B
Khi truyền tham số kèm theo tên (ten="An"), đây gọi là keyword argument.
Câu 96. Đoạn code sau in ra gì?
def nhan(a, b): ket_qua = a * b return ket_qua
x = nhan(2, 5)print(x)Đáp án: A
Hàm nhan trả về tích của 2 và 5 là 10, được gán cho biến x.
Câu 97. Biến khai báo bên trong một hàm có phạm vi (scope) như thế nào?
Đáp án: B
Biến khai báo bên trong hàm là biến cục bộ (local variable), chỉ tồn tại trong phạm vi hàm đó.
Câu 98. Đoạn code sau in ra gì?
def kiem_tra_chan_le(n): if n % 2 == 0: return "chẵn" else: return "lẻ"
print(kiem_tra_chan_le(7))Đáp án: B
7 % 2 = 1, khác 0 nên hàm trả về "lẻ".
Câu 99. Một hàm có thể trả về nhiều giá trị cùng lúc bằng cách nào?
Đáp án: B
Khi viết return a, b, Python tự động gói các giá trị thành một tuple (a, b) và trả về.
Câu 100. Đoạn code sau in ra gì?
def tinh(a, b): return a + b, a - b
tong, hieu = tinh(10, 4)print(tong, hieu)Đáp án: A
Hàm trả về tuple (14, 6), được giải nén (unpack) trực tiếp vào tong = 14 và hieu = 6, print(tong, hieu) in ra 14 6.
Nhóm 11: Chuỗi (string) nâng cao
Phần tiêu đề “Nhóm 11: Chuỗi (string) nâng cao”Câu 101. Kết quả của len(“Hello”) là gì?
Đáp án: B
Chuỗi "Hello" có 5 ký tự: H, e, l, l, o. len() đếm số ký tự trong chuỗi.
Câu 102. Kết quả của “Hello”.upper() là gì?
Đáp án: B
upper() chuyển tất cả ký tự trong chuỗi thành chữ hoa.
Câu 103. Kết quả của ” Hello “.strip() là gì?
Đáp án: A
strip() loại bỏ khoảng trắng thừa ở cả đầu và cuối chuỗi.
Câu 104. Kết quả của “a,b,c”.split(“,”) là gì?
Đáp án: B
split(",") tách chuỗi thành một danh sách (list) các chuỗi con dựa trên dấu phân cách ,.
Câu 105. Kết quả của “-”.join([“a”, “b”, “c”]) là gì?
Đáp án: A
join() nối các phần tử trong list thành một chuỗi, xen giữa là chuỗi gọi hàm ("-").
Câu 106. Kết quả của “Hello”[1:4] là gì?
Đáp án: B
Slicing [1:4] lấy các ký tự từ chỉ số 1 đến trước chỉ số 4, tức là e, l, l.
Câu 107. Kết quả của “Hello”[::-1] là gì?
Đáp án: B
Slicing với bước nhảy -1 duyệt chuỗi theo chiều ngược lại, tạo ra chuỗi đảo ngược.
Câu 108. Kết quả của “python”.find(“th”) là gì?
Đáp án: C
find() trả về chỉ số bắt đầu của chuỗi con. Trong "python", chuỗi "th" bắt đầu ở chỉ số 2 (p=0, y=1, t=2).
Câu 109. Kết quả của “abc” * 3 là gì?
Đáp án: B
Toán tử * giữa chuỗi và số nguyên lặp lại chuỗi đó số lần tương ứng.
Câu 110. Kết quả của “Hello”.replace(“l”, “L”) là gì?
Đáp án: A
replace("l", "L") thay tất cả ký tự l bằng L trong chuỗi.
Nhóm 12: List nâng cao
Phần tiêu đề “Nhóm 12: List nâng cao”Câu 111. Đoạn code sau in ra gì?
lst = [1, 2]lst.append(3)print(lst)Đáp án: A
append() thêm một phần tử vào cuối danh sách.
Câu 112. Đoạn code sau in ra gì?
lst = [1, 2, 3]lst.remove(2)print(lst)Đáp án: B
remove(2) xoá giá trị 2 đầu tiên tìm thấy trong danh sách, không phải xoá theo chỉ số.
Câu 113. Đoạn code sau in ra gì?
lst = [3, 1, 2]lst.sort()print(lst)Đáp án: A
sort() sắp xếp danh sách tại chỗ theo thứ tự tăng dần mặc định.
Câu 114. Kết quả của len([1, 2, 3, 4]) là gì?
Đáp án: C
Danh sách [1, 2, 3, 4] có 4 phần tử.
Câu 115. Kết quả của [1, 2, 3] + [4, 5] là gì?
Đáp án: A
Toán tử + giữa hai list thực hiện nối hai danh sách, không phải cộng từng phần tử.
Câu 116. Kết quả của [1, 2, 3] * 2 là gì?
Đáp án: B
Toán tử * giữa list và số nguyên lặp lại toàn bộ danh sách số lần tương ứng.
Câu 117. Đoạn code sau in ra gì?
lst = [1, 2, 3]print(lst.pop())Đáp án: C
pop() không tham số xoá và trả về phần tử cuối cùng của danh sách, ở đây là 3.
Câu 118. Kết quả của [x * 2 for x in range(3)] là gì?
Đáp án: B
Đây là list comprehension: với mỗi x trong range(3) (là 0, 1, 2), tính x * 2, cho ra [0, 2, 4].
Câu 119. Đoạn code sau in ra gì?
lst = [1, 2, 3]print(lst[-1])Đáp án: C
Chỉ số -1 biểu thị phần tử cuối cùng của danh sách.
Câu 120. Kết quả của sorted([3, 1, 2], reverse=True) là gì?
Đáp án: A
sorted(..., reverse=True) trả về danh sách mới đã sắp xếp theo thứ tự giảm dần.
Nhóm 13: Tuple
Phần tiêu đề “Nhóm 13: Tuple”Câu 121. Kết quả của type((1, 2, 3)) là gì?
Đáp án: A
Dữ liệu được bao trong dấu ngoặc đơn () với các giá trị ngăn cách bởi dấu phẩy tạo thành một tuple.
Câu 122. Đoạn code sau xảy ra điều gì?
t = (1, 2, 3)t[0] = 10Đáp án: C
Tuple là kiểu dữ liệu bất biến (immutable), không thể thay đổi giá trị phần tử sau khi tạo.
Câu 123. Đoạn code sau in ra gì?
t = (1, 2, 3)print(t[1])Đáp án: B
Cũng như list, tuple đánh chỉ số từ 0, nên t[1] là phần tử thứ hai, giá trị 2.
Câu 124. Kết quả của len((1, 2, 3, 4)) là gì?
Đáp án: D
Tuple (1, 2, 3, 4) có 4 phần tử.
Câu 125. Đoạn code sau in ra gì?
a, b = (1, 2)print(a, b)Đáp án: A
Đây là giải nén tuple (unpacking): a nhận 1, b nhận 2.
Câu 126. Đoạn code sau in ra gì?
t = 1, 2, 3print(type(t))Đáp án: A
Dấu ngoặc đơn () không bắt buộc để tạo tuple - chỉ cần các giá trị ngăn cách bởi dấu phẩy.
Câu 127. Kết quả của type((5,)) là gì?
Đáp án: A
Cần có dấu phẩy , sau phần tử duy nhất để Python hiểu đó là tuple một phần tử, chứ không phải (5) (chỉ là số 5 trong ngoặc).
Câu 128. Kết quả của (1, 2) + (3, 4) là gì?
Đáp án: B
Giống list, toán tử + giữa hai tuple thực hiện nối hai tuple lại với nhau.
Câu 129. Kết quả của (1, 2, 3, 2).count(2) là gì?
Đáp án: B
count(2) đếm số lần giá trị 2 xuất hiện trong tuple, ở đây là 2 lần.
Câu 130. Kết quả của tuple([1, 2, 3]) là gì?
Đáp án: C
Hàm tuple() chuyển đổi một danh sách (list) thành tuple.
Nhóm 14: Dictionary (từ điển)
Phần tiêu đề “Nhóm 14: Dictionary (từ điển)”Câu 131. Đoạn code sau in ra gì?
d = {"a": 1, "b": 2}print(d["a"])Đáp án: B
Truy cập dictionary bằng khoá "a" sẽ trả về giá trị tương ứng, ở đây là 1.
Câu 132. Đoạn code sau in ra gì?
d = {"a": 1}d["b"] = 2print(d)Đáp án: B
Gán giá trị cho một khoá chưa tồn tại ("b") sẽ thêm cặp khoá-giá trị mới vào dictionary.
Câu 133. Kết quả của len({“a”: 1, “b”: 2}) là gì?
Đáp án: B
len() trên dictionary trả về số cặp khoá-giá trị, ở đây là 2.
Câu 134. Đoạn code sau in ra gì?
d = {"a": 1}print(d.get("b", 0))Đáp án: C
get(khoá, giá_trị_mặc_định) trả về giá trị mặc định nếu khoá không tồn tại, thay vì báo lỗi như d["b"].
Câu 135. Đoạn code sau in ra gì?
d = {"a": 1, "b": 2}print(list(d.keys()))Đáp án: B
keys() trả về tất cả các khoá trong dictionary; bọc trong list() để hiển thị dạng danh sách.
Câu 136. Đoạn code sau in ra gì?
d = {"a": 1, "b": 2}print(list(d.values()))Đáp án: A
values() trả về tất cả các giá trị trong dictionary.
Câu 137. Đoạn code sau in ra gì?
d = {"a": 1}print("a" in d)Đáp án: A
Toán tử in trên dictionary kiểm tra xem một giá trị có phải là khoá hay không. "a" là khoá tồn tại nên trả về True.
Câu 138. Đoạn code sau in ra gì?
d = {"a": 1, "b": 2}del d["a"]print(d)Đáp án: B
del d["a"] xoá cặp khoá-giá trị có khoá "a" ra khỏi dictionary.
Câu 139. Đoạn code sau in ra gì?
d = {"a": 1, "a": 2}print(d)Đáp án: B
Mỗi khoá trong dictionary là duy nhất. Khi khai báo trùng khoá, giá trị sau cùng sẽ ghi đè giá trị trước đó.
Câu 140. Phương thức items() của dictionary trả về gì?
Đáp án: C
items() trả về từng cặp (khoá, giá_trị) dưới dạng tuple, thường dùng trong vòng lặp for key, value in d.items():.
Nhóm 15: Set (tập hợp)
Phần tiêu đề “Nhóm 15: Set (tập hợp)”Câu 141. Đoạn code sau in ra bao nhiêu phần tử?
s = {1, 2, 2, 3}print(len(s))Đáp án: C
Set tự động loại bỏ các phần tử trùng lặp, nên {1, 2, 2, 3} chỉ còn 3 phần tử: 1, 2, 3.
Câu 142. Đoạn code sau in ra bao nhiêu phần tử?
s = {1, 2, 3}s.add(4)print(len(s))Đáp án: B
add() thêm một phần tử mới vào set. Sau khi thêm 4, set có 4 phần tử.
Câu 143. Kết quả của {1, 2, 3} & {2, 3, 4} là gì?
Đáp án: B
Toán tử & trả về giao của hai set - các phần tử có mặt ở cả hai tập hợp.
Câu 144. Kết quả của {1, 2, 3} | {3, 4, 5} là gì?
Đáp án: A
Toán tử | trả về hợp của hai set - tất cả các phần tử có trong ít nhất một tập hợp, không trùng lặp.
Câu 145. Kết quả của {1, 2, 3} - {2, 3} là gì?
Đáp án: C
Toán tử - trả về hiệu của hai set - các phần tử có trong tập đầu nhưng không có trong tập sau.
Câu 146. Kết quả của type({1, 2, 3}) là gì?
Đáp án: A
Dữ liệu bao trong dấu ngoặc nhọn {} (không có khoá:giá trị) tạo thành một set.
Câu 147. Kết quả của len(set([1, 1, 2, 2, 3])) là gì?
Đáp án: B
set() chuyển list thành set, loại bỏ các phần tử trùng lặp, chỉ còn 1, 2, 3.
Câu 148. Đoạn code sau in ra gì?
s = {1, 2, 3}print(3 in s)Đáp án: A
Toán tử in kiểm tra một phần tử có tồn tại trong set hay không. 3 có trong set nên kết quả là True.
Câu 149. Đoạn code sau in ra bao nhiêu phần tử?
s = {1, 2, 2, 3, 3, 3}print(len(s))Đáp án: C
Set không cho phép phần tử trùng lặp, nên dù khai báo nhiều lần, mỗi giá trị chỉ được giữ lại một lần.
Câu 150. Đoạn code sau xảy ra điều gì?
s = {1, 2, 3}print(s[0])Đáp án: B
Set là tập hợp không có thứ tự và không hỗ trợ truy cập theo chỉ số, nên s[0] gây lỗi TypeError.
Nhóm 16: Hàm (function) nâng cao
Phần tiêu đề “Nhóm 16: Hàm (function) nâng cao”Câu 151. Đoạn code sau in ra gì?
def f(a, b=5): return a + b
print(f(3))Đáp án: C
b=5 là giá trị mặc định. Khi gọi f(3) chỉ truyền a, b tự dùng giá trị mặc định 5, nên kết quả là 3 + 5 = 8.
Câu 152. Đoạn code sau in ra gì?
def f(*args): return sum(args)
print(f(1, 2, 3))Đáp án: C
*args cho phép hàm nhận số lượng bất kỳ đối số, gộp chúng thành một tuple. sum((1, 2, 3)) bằng 6.
Câu 153. Đoạn code sau in ra gì?
def f(**kwargs): return kwargs
print(f(a=1, b=2))Đáp án: B
**kwargs gộp các đối số dạng tên=giá_trị thành một dictionary.
Câu 154. Đoạn code sau in ra gì?
x = 10
def f(): global x x = 20
f()print(x)Đáp án: B
Từ khoá global cho phép hàm thay đổi giá trị của biến toàn cục x thay vì tạo biến cục bộ mới.
Câu 155. Đoạn code sau xảy ra điều gì?
def f(): y = 5
f()print(y)Đáp án: B
y là biến cục bộ (local), chỉ tồn tại bên trong hàm f(). Truy cập y bên ngoài gây lỗi NameError.
Câu 156. Đoạn code sau in ra gì?
def f(a, b, c): return a + b + c
print(f(c=3, a=1, b=2))Đáp án: C
Khi gọi hàm bằng đối số theo tên (c=3, a=1, b=2), Python tự khớp đúng tham số bất kể thứ tự truyền vào, kết quả 1 + 2 + 3 = 6.
Câu 157. Đoạn code sau in ra gì?
f = lambda x: x * 2print(f(5))Đáp án: B
lambda x: x * 2 là một hàm ẩn danh (không tên) nhận x và trả về x * 2. f(5) cho ra 10.
Câu 158. Đoạn code sau in ra gì?
def f(): print("hi")
x = f()print(x)Đáp án: A
f() in ra "hi" rồi kết thúc mà không có return, nên hàm trả về None mặc định. print(x) in ra None.
Câu 159. Định nghĩa hàm nào sau đây gây lỗi cú pháp?
Đáp án: C
Tham số không có giá trị mặc định không được đứng sau tham số có giá trị mặc định trong định nghĩa hàm, nên def f(a=1, b, c): gây lỗi cú pháp.
Câu 160. Số lượng và tên tham số một hàm nhận được xác định bởi đâu?
Đáp án: C
Các tham số (parameters) được liệt kê trong dấu ngoặc của câu lệnh def xác định hàm nhận vào những gì khi được gọi.
Nhóm 17: Xử lý ngoại lệ (try - except)
Phần tiêu đề “Nhóm 17: Xử lý ngoại lệ (try - except)”Câu 161. Đoạn code sau in ra gì?
try: x = 1 / 0except ZeroDivisionError: print("Loi chia cho 0")Đáp án: A
try/except bắt lỗi ZeroDivisionError xảy ra khi chia cho 0, thực thi khối except thay vì làm crash chương trình.
Câu 162. Đoạn code sau in ra gì?
try: x = int("abc")except ValueError: print("Loi so")Đáp án: A
int("abc") gây lỗi ValueError vì "abc" không thể chuyển thành số. except ValueError bắt lỗi này và in "Loi so".
Câu 163. Đoạn code sau in ra gì?
try: x = 1 + 1except: print("Loi")else: print("OK")Đáp án: B
Khối else chỉ chạy khi khối try không xảy ra lỗi. Vì 1 + 1 không gây lỗi, chương trình in "OK".
Câu 164. Đoạn code sau in ra gì?
try: x = 1 / 0except ZeroDivisionError: print("Loi")finally: print("Ket thuc")Đáp án: C
Khối finally luôn được thực thi, dù có lỗi hay không, sau khi khối except đã xử lý lỗi.
Câu 165. Đoạn code sau in ra gì?
try: x = 1 / 0except Exception as e: print(type(e).__name__)Đáp án: A
Exception là lớp cha, bắt được mọi loại lỗi thông thường, bao gồm ZeroDivisionError. type(e).__name__ in ra tên chính xác của lỗi xảy ra.
Câu 166. Cú pháp nào dùng để bắt nhiều loại lỗi trong cùng một khối except?
Đáp án: B
Để bắt nhiều loại lỗi trong cùng một khối, ta liệt kê chúng trong một tuple: except (LoaiLoi1, LoaiLoi2):.
Câu 167. Từ khoá raise trong Python dùng để làm gì?
Đáp án: B
raise cho phép lập trình viên chủ động tạo ra (ném) một ngoại lệ, ví dụ raise ValueError("Sai").
Câu 168. Thứ tự nào sau đây là đúng khi viết đầy đủ một khối try?
Đáp án: C
Thứ tự chuẩn là try trước, sau đó đến except, tiếp theo else (tuỳ chọn), và cuối cùng là finally (tuỳ chọn).
Câu 169. Điều gì xảy ra nếu lỗi phát sinh không khớp với bất kỳ khối except nào?
Đáp án: C
Nếu không có khối except nào khớp với loại lỗi xảy ra, ngoại lệ sẽ không được xử lý và chương trình dừng lại, in ra traceback.
Câu 170. Khi có nhiều khối except cho cùng một khối try, Python xử lý theo cách nào?
Đáp án: B
Python kiểm tra các khối except theo thứ tự từ trên xuống và chỉ thực thi khối đầu tiên khớp với loại lỗi đã xảy ra.
Nhóm 18: Module và thư viện chuẩn
Phần tiêu đề “Nhóm 18: Module và thư viện chuẩn”Câu 171. Đoạn code sau in ra gì?
import mathprint(math.sqrt(16))Đáp án: A
math.sqrt() tính căn bậc hai và luôn trả về kiểu float, nên kết quả là 4.0.
Câu 172. Hàm random.randint(1, 10) trong module random trả về gì?
Đáp án: C
random.randint(a, b) trả về một số nguyên ngẫu nhiên trong khoảng [a, b], bao gồm cả hai đầu mút.
Câu 173. Đoạn code sau in ra gì?
from math import piprint(round(pi, 2))Đáp án: C
from math import pi nhập trực tiếp hằng số pi (xấp xỉ 3.14159...). Làm tròn 2 chữ số thập phân cho ra 3.14.
Câu 174. Kết quả của type(math.pi) là gì?
Đáp án: B
math.pi là một hằng số có phần thập phân nên có kiểu float.
Câu 175. Cú pháp nào dùng để nhập module với một tên gọi khác (bí danh)?
Đáp án: B
Từ khoá as cho phép đặt bí danh cho module khi import, ví dụ import math as m.
Câu 176. Đoạn code sau in ra gì?
import mathprint(math.floor(3.7))Đáp án: B
math.floor() làm tròn xuống số nguyên gần nhất, nên floor(3.7) = 3.
Câu 177. Đoạn code sau in ra gì?
import mathprint(math.ceil(3.2))Đáp án: A
math.ceil() làm tròn lên số nguyên gần nhất, nên ceil(3.2) = 4.
Câu 178. Hàm len() có cần import trước khi sử dụng không?
Đáp án: A
len() là một hàm built-in của Python, luôn có sẵn mà không cần import bất kỳ module nào.
Câu 179. Hàm random.choice([1, 2, 3]) trong module random làm gì?
Đáp án: C
random.choice(danh_sách) trả về một phần tử ngẫu nhiên được chọn từ danh sách đưa vào.
Câu 180. Từ khoá nào dùng để đưa một module vào chương trình Python?
Đáp án: B
Từ khoá import dùng để nạp một module vào chương trình để sử dụng các hàm, biến bên trong nó.
Nhóm 19: Đệ quy (recursion)
Phần tiêu đề “Nhóm 19: Đệ quy (recursion)”Câu 181. Đệ quy (recursion) trong lập trình là gì?
Đáp án: B
Đệ quy là kỹ thuật lập trình trong đó một hàm gọi lại chính nó để giải quyết bài toán con nhỏ hơn.
Câu 182. Đoạn code sau in ra gì?
def factorial(n): if n == 0: return 1 return n * factorial(n - 1)
print(factorial(4))Đáp án: C
factorial(4) = 4 * 3 * 2 * 1 * factorial(0) = 4 * 3 * 2 * 1 * 1 = 24.
Câu 183. Điều kiện để một hàm đệ quy dừng lại được gọi là gì?
Đáp án: B
Điều kiện dừng (base case) là trường hợp hàm đệ quy không gọi lại chính nó nữa mà trả về kết quả trực tiếp.
Câu 184. Điều gì xảy ra nếu một hàm đệ quy không có điều kiện dừng?
Đáp án: C
Thiếu điều kiện dừng khiến hàm gọi lại chính nó liên tục không ngừng, cuối cùng Python báo lỗi RecursionError khi vượt quá độ sâu đệ quy cho phép.
Câu 185. Đoạn code sau in ra gì?
def fib(n): if n <= 1: return n return fib(n - 1) + fib(n - 2)
print(fib(5))Đáp án: C
Dãy Fibonacci: fib(0)=0, fib(1)=1, fib(2)=1, fib(3)=2, fib(4)=3, fib(5)=5.
Câu 186. Theo định nghĩa toán học, factorial(0) bằng bao nhiêu?
Đáp án: A
Theo định nghĩa toán học, 0! = 1. Đây thường là điều kiện dừng trong các hàm đệ quy tính giai thừa.
Câu 187. Hầu hết các bài toán giải bằng đệ quy đều có thể thay thế bằng cấu trúc điều khiển nào?
Đáp án: B
Về mặt lý thuyết, hầu hết bài toán giải được bằng đệ quy đều có thể viết lại bằng vòng lặp for hoặc while.
Câu 188. Đoạn code sau in ra gì?
def f(n): if n <= 0: return 0 return n + f(n - 1)
print(f(3))Đáp án: B
f(3) = 3 + f(2) = 3 + 2 + f(1) = 3 + 2 + 1 + f(0) = 3 + 2 + 1 + 0 = 6.
Câu 189. Nhược điểm chính của đệ quy so với vòng lặp là gì?
Đáp án: B
Mỗi lần gọi hàm đệ quy, Python phải lưu lại trạng thái vào ngăn xếp (call stack), nên với đệ quy sâu, chương trình tốn nhiều bộ nhớ hơn so với vòng lặp thông thường.
Câu 190. Lỗi RecursionError trong Python xảy ra khi nào?
Đáp án: C
RecursionError xảy ra khi hàm đệ quy gọi chính nó quá nhiều lần, vượt quá giới hạn độ sâu đệ quy mặc định của Python (thường là 1000 lần).
Nhóm 20: Lập trình hướng đối tượng (OOP) cơ bản
Phần tiêu đề “Nhóm 20: Lập trình hướng đối tượng (OOP) cơ bản”Câu 191. Từ khoá nào dùng để định nghĩa một lớp (class) trong Python?
Đáp án: C
Từ khoá class dùng để định nghĩa một lớp (class) trong Python, ví dụ class Dog:.
Câu 192. Trong một phương thức của lớp, self đại diện cho điều gì?
Đáp án: B
self là tham số đầu tiên của mọi phương thức trong lớp, đại diện cho chính đối tượng đang gọi phương thức đó.
Câu 193. Phương thức init trong một lớp dùng để làm gì?
Đáp án: C
__init__ là phương thức khởi tạo (constructor), được Python tự động gọi ngay khi một đối tượng mới được tạo ra từ lớp.
Câu 194. Đoạn code sau in ra gì?
class Dog: def __init__(self, name): self.name = name
d = Dog("Mun")print(d.name)Đáp án: B
Khi tạo d = Dog("Mun"), __init__ gán self.name = "Mun". Truy cập d.name trả về "Mun".
Câu 195. Đối tượng (object) trong lập trình hướng đối tượng là gì?
Đáp án: C
Đối tượng (object) là một thực thể cụ thể được tạo ra (khởi tạo) dựa trên khuôn mẫu của một lớp (class).
Câu 196. Đoạn code sau in ra gì?
class Dog: def sua(self): return "Gau gau"
d = Dog()print(d.sua())Đáp án: B
Gọi phương thức d.sua() thực thi nội dung hàm sua, trả về chuỗi "Gau gau".
Câu 197. Thuộc tính (attribute) của một đối tượng được truy cập theo cú pháp nào?
Đáp án: B
Thuộc tính của đối tượng được truy cập bằng dấu chấm ., theo cú pháp ten_doi_tuong.ten_thuoc_tinh.
Câu 198. Một lớp (class) có thể được dùng để tạo ra bao nhiêu đối tượng?
Đáp án: B
Một lớp là khuôn mẫu (blueprint) dùng chung, có thể tạo ra nhiều đối tượng khác nhau, mỗi đối tượng có dữ liệu riêng.
Câu 199. Đoạn code sau in ra gì?
class Counter: def __init__(self): self.count = 0
def increase(self): self.count += 1
c = Counter()c.increase()c.increase()print(c.count)Đáp án: B
count khởi tạo bằng 0, mỗi lần gọi increase() tăng thêm 1. Gọi 2 lần nên count = 2.
Câu 200. OOP là viết tắt của cụm từ nào?
Đáp án: A
OOP là viết tắt của Object-Oriented Programming - Lập trình hướng đối tượng, một mô hình lập trình dựa trên khái niệm lớp và đối tượng.