Trắc nghiệm Tin học 10 Kết nối tri thức Bài 28: Phạm vi của biến - Đề 03 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong Python, khi một biến được khai báo bên trong một hàm, nó có phạm vi hoạt động như thế nào?
- A. Toàn cục, có thể truy cập từ bất kỳ đâu trong chương trình.
- B. Cục bộ, chỉ có thể truy cập bên trong hàm nơi nó được khai báo.
- C. Được chia sẻ giữa tất cả các hàm trong cùng một tệp.
- D. Tồn tại cho đến khi chương trình kết thúc, bất kể vị trí khai báo.
Câu 2: Xem xét đoạn mã Python sau:
def ham_ngoai():
x = 10
def ham_trong():
print(x)
ham_trong()
ham_ngoai()
Giá trị nào sẽ được in ra khi thực thi đoạn mã trên?
- A. 10
- B. Biến x không được định nghĩa
- C. 0
- D. Lỗi cú pháp
Câu 3: Biến toàn cục trong Python được khai báo ở đâu?
- A. Bên trong một hàm cụ thể với từ khóa "global".
- B. Ở đầu mỗi chương trình Python.
- C. Bên ngoài tất cả các hàm trong một chương trình.
- D. Chỉ khi chương trình bắt đầu thực thi.
Câu 4: Cho đoạn mã Python:
x = 5
def thay_doi_x():
x = 10
print("Giá trị x trong hàm:", x)
thay_doi_x()
print("Giá trị x ngoài hàm:", x)
Đâu là kết quả đầu ra của đoạn mã này?
- A. Giá trị x trong hàm: 10
Giá trị x ngoài hàm: 10
- B. Giá trị x trong hàm: 10
Giá trị x ngoài hàm: 5
- C. Giá trị x trong hàm: 5
Giá trị x ngoài hàm: 10
- D. Lỗi vì biến x được gán lại trong hàm
Câu 5: Từ khóa nào trong Python được sử dụng để khai báo rằng một biến bên trong hàm là biến toàn cục?
- A. local
- B. function
- C. static
- D. global
Câu 6: Xem xét đoạn mã sau:
x = 20
def sua_doi_toan_cuc():
global x
x = 25
sua_doi_toan_cuc()
print(x)
Giá trị nào của x sẽ được in ra?
- A. 20
- B. Không có giá trị nào được in
- C. 25
- D. Lỗi vì biến toàn cục không thể sửa đổi
Câu 7: Điều gì xảy ra nếu bạn cố gắng truy cập một biến cục bộ bên ngoài hàm mà nó được khai báo?
- A. Lỗi NameError sẽ xảy ra.
- B. Chương trình sẽ chạy nhưng có thể cho kết quả không mong muốn.
- C. Biến sẽ tự động được coi là biến toàn cục.
- D. Giá trị mặc định của biến (nếu có) sẽ được sử dụng.
Câu 8: Phạm vi của một biến quyết định điều gì?
- A. Kiểu dữ liệu của biến.
- B. Vùng mã lệnh mà biến có thể được truy cập.
- C. Thời gian tồn tại của biến trong bộ nhớ.
- D. Tốc độ truy cập vào biến.
Câu 9: Cho đoạn mã:
def tinh_tong(a, b):
c = a + b
return c
ket_qua = tinh_tong(5, 3)
print(c)
Đoạn mã này có lỗi không? Nếu có, lỗi ở dòng nào và vì sao?
- A. Không có lỗi.
- B. Lỗi ở dòng 2, biến "c" chưa được khai báo.
- C. Lỗi ở dòng 5, biến "c" là biến cục bộ của hàm "tinh_tong".
- D. Lỗi ở dòng 4, phép gán "ket_qua" không hợp lệ.
Câu 10: Trong một chương trình lớn, việc sử dụng biến cục bộ thay vì biến toàn cục mang lại lợi ích gì?
- A. Tăng tốc độ thực thi chương trình.
- B. Giảm khả năng xung đột tên biến và tăng tínhModular hóa.
- C. Tiết kiệm bộ nhớ.
- D. Cho phép truy cập biến từ nhiều chương trình khác nhau.
Câu 11: Xét đoạn mã:
def ham_a():
z = 7
def ham_b():
print(z)
ham_b()
print(z)
Hỏi dòng `print(z)` cuối cùng có gây ra lỗi không? Nếu có, đó là lỗi gì?
- A. Không lỗi, in ra giá trị 7.
- B. Có lỗi NameError, vì "z" không được định nghĩa trong phạm vi toàn cục.
- C. Có lỗi TypeError, vì "z" có kiểu dữ liệu không phù hợp.
- D. Có lỗi SyntaxError, vì cấu trúc hàm không đúng.
Câu 12: Cho chương trình Python sau:
x = 100
def ham_c():
x = 200
def ham_d():
nonlocal x
x = 300
ham_d()
print(x)
ham_c()
print(x)
Kết quả in ra của chương trình là gì?
- A. 200
100
- B. 300
100
- C. 300
200
- D. Lỗi vì nonlocal không được dùng ở phạm vi toàn cục
Câu 13: Biến nào có "thời gian sống" dài nhất trong chương trình Python?
- A. Biến toàn cục.
- B. Biến cục bộ.
- C. Tham số của hàm.
- D. Biến nonlocal.
Câu 14: Trong tình huống nào sau đây, việc sử dụng biến toàn cục là phù hợp nhất?
- A. Khi biến chỉ được sử dụng trong một hàm duy nhất.
- B. Để đếm số lần một vòng lặp được thực hiện.
- C. Khi cần chia sẻ dữ liệu giữa nhiều hàm khác nhau trong chương trình.
- D. Để lưu trữ giá trị tạm thời trong một phép tính.
Câu 15: Điều gì sẽ xảy ra khi bạn gán giá trị cho một biến mà không khai báo nó trong một hàm Python?
- A. Lỗi NameError sẽ xảy ra.
- B. Python sẽ coi đó là một biến cục bộ mới trong hàm.
- C. Python sẽ tìm kiếm biến toàn cục có cùng tên và gán giá trị cho nó.
- D. Chương trình sẽ không thực thi được.
Câu 16: Cho đoạn mã:
def ham_e():
m = 50
return m
print(ham_e())
print(m)
Kết quả đoạn mã trên sẽ như thế nào?
- A. 50
50
- B. 50
None
- C. 50
Giá trị mặc định của m
- D. In ra 50, sau đó gây lỗi NameError ở dòng cuối.
Câu 17: Trong Python, các tham số được định nghĩa trong dấu ngoặc đơn của định nghĩa hàm có phạm vi như thế nào?
- A. Toàn cục.
- B. Cục bộ trong hàm.
- C. Có thể truy cập từ bất kỳ hàm nào khác.
- D. Phạm vi phụ thuộc vào nơi hàm được gọi.
Câu 18: Xét đoạn mã:
def ham_f(p):
p = p + 10
print(p)
q = 5
ham_f(q)
print(q)
Giá trị nào sẽ được in ra?
- A. 15
15
- B. 5
15
- C. 15
5
- D. Lỗi vì tham số p không được khai báo bên ngoài hàm
Câu 19: Mục đích chính của việc phân chia phạm vi biến (cục bộ và toàn cục) trong lập trình là gì?
- A. Để tăng hiệu suất chương trình.
- B. Để giảm dung lượng bộ nhớ sử dụng.
- C. Để làm cho mã chương trình ngắn gọn hơn.
- D. Để quản lý tên biến và tránh xung đột tên, tăng tính tổ chức của mã.
Câu 20: Trong Python, điều gì xảy ra khi một biến cục bộ có cùng tên với một biến toàn cục?
- A. Biến cục bộ sẽ che phủ (shadow) biến toàn cục trong phạm vi của hàm.
- B. Biến toàn cục sẽ được ưu tiên sử dụng.
- C. Python sẽ báo lỗi xung đột tên.
- D. Hai biến này sẽ chia sẻ cùng một vùng nhớ.
Câu 21: Cho đoạn mã:
r = 10
def ham_g():
r = r + 5
print(r)
ham_g()
Đoạn mã này có chạy được không? Nếu không, tại sao?
- A. Có, in ra 15.
- B. Không, gây lỗi UnboundLocalError vì biến "r" cục bộ được tham chiếu trước khi gán.
- C. Có, in ra 10.
- D. Không, gây lỗi TypeError vì không thể cộng số với biến chưa xác định.
Câu 22: Để sửa lỗi trong đoạn mã ở Câu 21 và muốn hàm `ham_g` tăng giá trị của biến toàn cục `r` lên 5, bạn cần làm gì?
- A. Thay "r = r + 5" bằng "r += 5".
- B. Khai báo lại "r = 10" bên trong hàm "ham_g".
- C. Thêm dòng "global r" vào đầu hàm "ham_g".
- D. Không cần sửa, mã sẽ tự động hiểu là biến toàn cục.
Câu 23: Trong Python, biến nào được ưu tiên truy cập khi có cả biến cục bộ và biến toàn cục cùng tên trong một hàm?
- A. Biến toàn cục.
- B. Biến cục bộ.
- C. Biến nào được khai báo trước.
- D. Tùy thuộc vào kiểu dữ liệu của biến.
Câu 24: Phạm vi của biến nonlocal trong Python là gì?
- A. Toàn cục.
- B. Cục bộ trong hàm hiện tại.
- C. Trong phạm vi của hàm bao ngoài gần nhất, không phải toàn cục.
- D. Chỉ trong các vòng lặp và điều kiện.
Câu 25: Cho đoạn mã:
s = 0
def tinh_sum_chan(n):
s_cuc_bo = 0
for i in range(2, n + 1, 2):
s_cuc_bo += i
return s_cuc_bo
ket_qua_chan = tinh_sum_chan(10)
print(s_cuc_bo)
Đoạn mã này có lỗi không? Nếu có, lỗi gì?
- A. Không có lỗi, in ra tổng các số chẵn từ 2 đến 10.
- B. Có lỗi NameError, vì "s_cuc_bo" là biến cục bộ của hàm "tinh_sum_chan".
- C. Có lỗi TypeError, vì không thể cộng số với biến chưa xác định.
- D. Có lỗi SyntaxError, vì vòng lặp for không đúng cú pháp.
Câu 26: Khi nào biến cục bộ được tạo ra trong Python?
- A. Khi chương trình bắt đầu chạy.
- B. Trước khi hàm được gọi.
- C. Khi hàm bắt đầu thực thi.
- D. Sau khi hàm kết thúc thực thi.
Câu 27: Điều gì xảy ra với biến cục bộ sau khi hàm kết thúc thực thi?
- A. Biến cục bộ trở thành biến toàn cục.
- B. Biến cục bộ vẫn tồn tại và có thể truy cập từ lần gọi hàm tiếp theo.
- C. Biến cục bộ được lưu vào bộ nhớ đệm để tái sử dụng.
- D. Biến cục bộ bị hủy và bộ nhớ được giải phóng.
Câu 28: Trong Python, bạn có thể có các biến cục bộ có cùng tên trong các hàm khác nhau không?
- A. Có, các biến cục bộ chỉ tồn tại trong phạm vi hàm của chúng.
- B. Không, tên biến cục bộ phải là duy nhất trong toàn chương trình.
- C. Chỉ khi các hàm này không được gọi cùng nhau.
- D. Chỉ khi các biến này có kiểu dữ liệu khác nhau.
Câu 29: Cho đoạn mã:
x = "global"
def ham_h():
global x
y = "local"
x = x * 2
print(x)
print(y)
ham_h()
print(x)
Kết quả đầu ra là gì?
- A. globalglobal
local
global
- B. globalglobal
local
globalglobal
- C. global
local
global
- D. Lỗi vì không thể nhân chuỗi với số
Câu 30: Trong lập trình, việc hiểu rõ phạm vi của biến giúp tránh được loại lỗi nào?
- A. Lỗi cú pháp (SyntaxError).
- B. Lỗi kiểu dữ liệu (TypeError).
- C. Lỗi liên quan đến truy cập biến không đúng phạm vi (ví dụ: NameError, UnboundLocalError).
- D. Lỗi tràn bộ nhớ (MemoryError).