Sự khác biệt chính giữa thông dịch (interpreter) và biên dịch (compiler) là gì?
A. Thông dịch tạo ra mã đối tượng trung gian, biên dịch thì không.
B. Biên dịch thực thi từng dòng code, thông dịch thực thi toàn bộ chương trình.
C. Thông dịch phát hiện lỗi cú pháp của toàn bộ chương trình trước khi chạy.
D. Thông dịch dịch và thực thi từng dòng, lỗi dòng nào báo dòng đó; Biên dịch dịch toàn bộ trước khi chạy.
Answer: D
Trong Python, kiểu dữ liệu nào sau đây là Mutable (có thể thay đổi)?
A. str
B. tuple
C. list
D. int
Answer: C
Kết quả của đoạn mã print(3 + 4 * 2 ** 2) là gì?
A. 28
B. 19
C. 100
D. 144
Answer: B
Điều gì xảy ra khi bạn cố gắng gán giá trị mới cho một phần tử của tuple (ví dụ: t[0] = 3)?
A. Tuple được cập nhật giá trị mới.
B. Một tuple mới được tạo ra tự động.
C. Chương trình báo lỗi TypeError.
D. Giá trị không thay đổi nhưng không báo lỗi.
Answer: C
Đoạn mã s = "abcdefgh"; print(s[4:1:-2]) sẽ in ra kết quả nào?
A. "ec"
B. "ed"
C. "db"
D. "ca"
Answer: A
Giá trị của biến x sau khi thực hiện lệnh x = int(3.9) là gì?
A. 9
B. 4
C. 3
D. Báo lỗi TypeError
Answer: C
Khi một biến được định nghĩa bên trong hàm có tên trùng với biến toàn cục, biến đó được gọi là gì?
A. Biến toàn cục mới.
B. Biến tham chiếu.
C. Biến cục bộ (Local variable) che khuất biến toàn cục.
D. Biến hằng số.
Answer: C
Kết quả của biểu thức logic not (True and False) là gì?
A. TRUE
B. FALSE
C. Error
D. None
Answer: A
Phương thức nào được sử dụng để thêm một phần tử vào cuối danh sách L và thay đổi chính danh sách đó?
A. add(x)
B. append(x)
C. L + [x]
D. push(x)
Answer: B
Sự khác biệt chính giữa L.sort() và sorted(L) là gì?
A. sort() trả về list mới, sorted(L) thay đổi list gốc.
B. sort() thay đổi list gốc, sorted(L) trả về list mới và giữ nguyên list gốc.
C. Không có sự khác biệt về mặt dữ liệu.
D. sort() chỉ dùng cho số, sorted(L) dùng cho chuỗi.
Answer: B
Lệnh break trong vòng lặp có tác dụng gì?
A. Thoát khỏi chương trình ngay lập tức.
B. Bỏ qua lần lặp hiện tại.
C. Thoát khỏi vòng lặp chứa nó (innermost loop).
D. Khởi động lại vòng lặp.
Answer: C
Kết quả của đoạn code: L1 = [1, 2]; L2 = L1; L2.append(3); print(L1) là gì?
A. [1, 2]
B. [1, 2, 3]
C. [1, 2] và [1, 2, 3]
D. Báo lỗi
Answer: B
Hàm __init__ trong một class có vai trò gì?
A. Khởi tạo các biến của class (class variables).
B. Xóa đối tượng khi không dùng đến.
C. Khởi tạo một đối tượng (instance) mới của class.
D. Chuyển đổi đối tượng thành chuỗi.
Answer: C
Trong lập trình hướng đối tượng với Python, tham số self đại diện cho điều gì?
A. Class cha.
B. Class hiện tại.
C. Instance (đối tượng) cụ thể đang gọi phương thức.
D. Biến toàn cục của module.
Answer: C
Đoạn code d = {'a': 1, 'b': 2}; print(d.get('c', 3)) sẽ in ra gì?
A. KeyError
B. None
C. 3
D. 0
Answer: C
Chế độ mở file nào cho phép ghi đè nội dung mới lên file cũ nếu file đó đã tồn tại?
A. r'
B. a'
C. w'
D. r+'
Answer: C
Nếu một hàm trong Python không có lệnh return, nó sẽ trả về giá trị gì mặc định?
A. 0
B. FALSE
C. None
D. Error
Answer: C
Mục đích chính của câu lệnh assert trong lập trình là gì?
A. Xử lý ngoại lệ người dùng nhập sai.
B. Kiểm tra các điều kiện tiên quyết để đảm bảo chương trình chạy đúng giả định.
C. Thay thế cho câu lệnh if.
D. Tối ưu hóa hiệu năng.
Answer: B
Lệnh L.pop() thực hiện thao tác gì trên danh sách L?
A. Xóa phần tử đầu tiên.
B. Xóa phần tử cuối cùng và trả về giá trị đó.
C. Xóa tất cả phần tử.
D. Trả về phần tử cuối cùng nhưng không xóa.
Answer: B
Loại dữ liệu nào sau đây KHÔNG thể dùng làm key (khóa) trong dictionary?
A. int
B. string
C. tuple (chứa số)
D. list
Answer: D
Với x = 15 và y = 8, giá trị của biểu thức x > 10 and y < 10 là:
A. TRUE
B. FALSE
C. None
D. Error
Answer: A
Vòng lặp for i in range(5, 11, 2): sẽ duyệt qua các giá trị nào?
A. 5, 6, 7, 8, 9, 10
B. 5, 7, 9, 11
C. 5, 7, 9
D. 6, 8, 10
Answer: C
Khối finally trong cấu trúc try...except được thực thi khi nào?
A. Chỉ khi có lỗi xảy ra.
B. Chỉ khi không có lỗi.
C. Luôn luôn thực thi, bất kể có lỗi hay không.
D. Chỉ khi khối else chạy.
Answer: C
Điểm khác biệt giữa biến class (Class variable) và biến instance (Instance variable) là gì?
A. Biến class là duy nhất cho từng đối tượng.
B. Biến class được chia sẻ chung cho mọi đối tượng của class đó.
C. Biến class là hằng số không thể đổi.
D. Biến class chỉ dùng được trong __init__.
Answer: B
Phương thức đặc biệt __str__ trong class dùng để làm gì?
A. Khởi tạo đối tượng.
B. So sánh hai đối tượng.
C. Trả về chuỗi đại diện cho đối tượng khi dùng print().
D. Tính kích thước bộ nhớ của đối tượng.
Answer: C
Tại sao lệnh x[0] = "y" gây lỗi nếu x = "hello"?
A. Do lỗi cú pháp.
B. Do biến chưa được khai báo.
C. Do chuỗi (string) là kiểu dữ liệu bất biến (immutable).
D. Do chỉ mục vượt quá giới hạn.
Answer: C
Kiểm thử hộp đen (Black box testing) dựa trên yếu tố nào?
A. Cấu trúc mã nguồn bên trong.
B. Đặc tả đầu vào và đầu ra mong đợi mà không cần xem mã nguồn.
C. Từng dòng lệnh cụ thể.
D. Hiệu năng phần cứng.
Answer: B
Kiểm thử hộp trắng (Glass box testing) tập trung vào điều gì?
A. Giao diện người dùng.
B. Các đường dẫn thực thi (nhánh, vòng lặp) trong mã nguồn.
C. Dữ liệu ngẫu nhiên.
D. Tài liệu hướng dẫn.
Answer: B
Hàm nào trong module csv dùng để đọc file CSV và trả về mỗi dòng là một dictionary?
A. reader
B. writer
C. DictReader
D. parse
Answer: C
Hàm input() trong Python 3 luôn trả về dữ liệu kiểu gì?
A. int
B. float
C. str
D. Tùy nội dung nhập.
Answer: C
Trong đoạn mã def f(y): x = 1; x += 1, biến x có phạm vi (scope) là gì?
A. Global
B. Local (cục bộ trong f)
C. Built-in
D. Enclosing
Answer: B
Lệnh print("a" + 3) sẽ sinh ra lỗi gì?
A. SyntaxError
B. ValueError
C. TypeError
D. NameError
Answer: C
Cách nào sau đây tạo ra một bản sao (clone) thực sự của list L để tránh side effects?
A. L_copy = L
B. L_copy = L[:]
C. L_copy = L.clone()
D. L_copy = copy(L)
Answer: B
Hàm range(5) tạo ra dãy số nào?
A. 0, 1, 2, 3, 4, 5
B. 1, 2, 3, 4, 5
C. 0, 1, 2, 3, 4
D. 1, 2, 3, 4
Answer: C
Cú pháp đúng để kiểm tra key 'John' có trong dictionary grades hay không là gì?
A. has_key('John')
B. 'John' in grades
C. contains('John')
D. exist('John', grades)
Answer: B
Phương thức nào dùng để nối toàn bộ phần tử của một list khác vào cuối list hiện tại?
A. append()
B. add()
C. insert()
D. extend()
Answer: D
Từ khóa raise trong Python được dùng để làm gì?
A. Định nghĩa hàm mới.
B. Tăng giá trị biến.
C. Kích hoạt (ném ra) một ngoại lệ.
D. Bỏ qua lỗi.
Answer: C
Cơ chế kế thừa (Inheritance) cho phép class con làm gì?
A. Chỉ sử dụng tên của class cha.
B. Kế thừa các thuộc tính và phương thức của class cha.
C. Thay đổi mã nguồn gốc của class cha.
D. Chỉ kế thừa hàm __init__.
Answer: B
Sau khi thực hiện del(a[1]) trên danh sách a = [1, 2, 3], danh sách a sẽ như thế nào?
A. [1, 2]
B. [1, 3]
C. [2, 3]
D. [1, None, 3]
Answer: B
Khối except ValueError: sẽ bắt lỗi trong trường hợp nào?
A. Lỗi chia cho 0.
B. Lỗi truy cập index sai.
C. Lỗi giá trị không hợp lệ (ví dụ int("abc")).
D. Lỗi cú pháp.
Answer: C
Để gọi phương thức khởi tạo của class cha từ class con, ta dùng lệnh nào?
A. __init__(self)
B. super().__init__() hoặc ClassCha.__init__(self, ...)
C. __init__()
Answer: B
Biểu thức lambda x: x+1 trả về loại đối tượng nào?
A. Một số nguyên.
B. Một hàm (function).
C. Một chuỗi.
D. Một mã lỗi.
Answer: B
Giá trị float('nan') đại diện cho điều gì?
A. Số 0.
B. Vô cực.
C. Not a Number (Không phải số).
D. Chuỗi rỗng.
Answer: C
Khi mở file với chế độ 'a' (append), con trỏ file nằm ở vị trí nào?
A. Đầu file.
B. Cuối file.
C. Ngẫu nhiên.
D. File bị xóa trắng.
Answer: B
Hiện tượng Alias (bí danh) xảy ra khi nào?
A. Hai biến cùng tham chiếu đến một đối tượng mutable trong bộ nhớ.
B. Khi copy giá trị số.
C. Khi đổi tên file.
D. Khi tạo class mới.
Answer: A
Sự khác biệt giữa (1,) và (1) là gì?
A. (1,) là tuple, (1) là số nguyên.
B. (1,) là số nguyên, (1) là tuple.
C. Giống nhau.
D. (1,) là list.
Answer: A
Kiểm thử hồi quy (Regression testing) nhằm mục đích gì?
A. Kiểm thử chương trình lần đầu.
B. Đảm bảo các thay đổi/sửa lỗi mới không làm hỏng các tính năng cũ đã hoạt động.
C. Kiểm thử giao diện.
D. Kiểm thử ngẫu nhiên.
Answer: B
Phương thức nào trả về danh sách các key trong dictionary?
A. items()
B. values()
C. keys()
D. list()
Ans...