Bài 28 Phạm vi của biến

Lớp 10Tin Học19 câu hỏiBài tập

Phần 1

Câu 1

(Câu 28.1 trang 57 SBT Tin học 10) Cho đoạn chương trình sau:
def f(x, y):
n = x + y
m = x - y
return 2*n*(m + 1)
n = 5
m = 3
f(2, 1)
print(n, m)
Đoạn chương trình có lỗi không? Nếu không, lệnh print() in ra kết quả nào?
AKhông lỗi, in ra 5 3.
BKhông lỗi, in ra 3 1.
CKhông lỗi, in ra 12.
DCó lỗi vì biến n và m được khai báo cả trong và ngoài hàm.

Câu 2

(Câu 28.2 trang 57 SBT Tin học 10) Cho đoạn chương trình sau:
def f(a):
n = a + 1
n = (3*n + 1)**2
return n
f(1)
print(n)
Đoạn chương trình có lỗi không? Nếu không, lệnh print() in ra kết quả nào?
ACó lỗi vì biến n được khai báo trong hàm f() chỉ có tác dụng bên trong hàm, không có tác dụng bên ngoài hàm.
BKhông lỗi, in ra 49.
CKhông lỗi, in ra 7.
DKhông lỗi, in ra 2.

Câu 3

(Câu 28.3 trang 58 SBT Tin học 10) Trong Python, biến được khai báo và sử dụng bên trong một hàm được gọi là gì?
ABiến địa phương.
BBiến riêng.
CBiến tổng thể.
DBiến thông thường.

Câu 4

(Câu 28.6 trang 58 SBT Tin học 10) Cho đoạn chương trình sau:
m, n = 10, 4
def f(a):
n = n + m + a
return n
f(5)
Đoạn chương trình có lỗi không?
ACó lỗi vì trong hàm có phép gán cho n nên n được xem là biến địa phương, nhưng lại được dùng ở vế phải trước khi có giá trị.
BKhông lỗi, hàm f(5) trả về 19.
CKhông lỗi, hàm f(5) trả về 15.
DCó lỗi vì biến m không thể được dùng bên trong hàm.

Câu 5

(Câu 28.7 trang 58 SBT Tin học 10) Cho đoạn chương trình sau:
m, n = 10, 4
def f(a):
k = n + m + a
return k
f(5)
Đoạn chương trình có lỗi không?
AKhông lỗi, hàm f(5) trả về 19.
BKhông lỗi, hàm f(5) trả về 15.
CCó lỗi vì biến m và n khai báo bên ngoài hàm không bao giờ được dùng bên trong hàm.
DCó lỗi vì biến k không được khai báo bên ngoài hàm.

Câu 6

(Câu 28.8 trang 58 SBT Tin học 10) Cho đoạn chương trình sau:
def f(s):
m = "train"
return m + s
m = "baby"
s = f(" go")
print(s)
Chương trình sẽ in ra giá trị gì?
Atrain go.
Bbaby go.
Ctrain baby.
Dgo train.

Câu 7

(Câu 28.9 trang 58 SBT Tin học 10) Mệnh đề nào dưới đây phát biểu sai về phạm vi tác dụng của biến trong Python?
ABiến trong Python khi đã được khai báo sẽ có tác dụng trong tất cả các hàm và bên ngoài.
BBiến được khai báo bên trong hàm chỉ có tác dụng trong hàm đó, không có tác dụng bên ngoài.
CBiến được khai báo bên ngoài hàm sẽ không có tác dụng bên trong hàm như một biến.
DBiến khai báo bên ngoài nếu muốn có tác dụng bên trong hàm thì cần khai báo lại trong hàm với từ khoá global.

Phần 2

Câu 1

(Câu 28.4 trang 58 SBT Tin học 10) Có thể khai báo một biến bên trong hàm trùng tên với biến đã khai báo trước đó bên ngoài hàm không? Nhận định nào sau đây đúng hoặc sai?
a)Có thể khai báo một biến bên trong hàm trùng tên với biến đã khai báo trước đó bên ngoài hàm.
b)Biến khai báo bên trong hàm có phạm vi địa phương, chỉ có tác dụng trong hàm đó.
c)Biến bên trong hàm và biến bên ngoài hàm dù trùng tên vẫn có thể là hai biến khác nhau.
d)Nếu một biến bên trong hàm trùng tên với biến bên ngoài hàm thì Python luôn báo lỗi cú pháp.

Câu 2

(Câu 28.5 trang 58 SBT Tin học 10) Khi khai báo hàm có tham số, các tham số này có thể coi là biến địa phương của hàm hay không? Nhận định nào sau đây đúng hoặc sai?
a)Tham số của hàm có thể được coi là biến địa phương của hàm.
b)Tham số chỉ có tác dụng trong phạm vi của hàm nơi nó được khai báo.
c)Khi gọi hàm, giá trị đối số được truyền cho tham số tương ứng.
d)Tham số của hàm luôn là biến tổng thể và có tác dụng trong toàn bộ chương trình.

Câu 3

(Câu 28.6 trang 58 SBT Tin học 10) Về lỗi trong đoạn chương trình sau, nhận định nào đúng hoặc sai?
m, n = 10, 4
def f(a):
n = n + m + a
return n
f(5)
a)Biến m được khai báo bên ngoài hàm và chỉ được đọc trong hàm nên có thể truy cập được.
b)Do trong hàm có phép gán cho n, Python xem n là biến địa phương của hàm f().
c)Lệnh n = n + m + a gây lỗi vì n địa phương được dùng ở vế phải trước khi được gán giá trị.
d)Đoạn chương trình không có lỗi vì mọi biến khai báo bên ngoài hàm đều tự động trở thành biến địa phương trong hàm.

Câu 4

(Câu 28.7 trang 58 SBT Tin học 10) Về đoạn chương trình sau, nhận định nào đúng hoặc sai?
m, n = 10, 4
def f(a):
k = n + m + a
return k
f(5)
a)Đoạn chương trình không có lỗi.
b)Trong hàm f(), các biến m và n được khai báo bên ngoài hàm vẫn có thể được đọc để tính giá trị.
c)Hàm f(5) trả về giá trị 19.
d)Hàm f(5) trả về giá trị 5 vì chỉ dùng tham số a, không dùng được m và n.

Câu 5

(Câu 28.10 trang 59 SBT Tin học 10) Chương trình sau có lỗi không? Nếu có, làm thế nào để sửa hết lỗi?
def f():
n = n + 1
return n
n = 15
a = f()
print(a)
Nhận định nào sau đây đúng hoặc sai?
a)Chương trình có lỗi vì trong hàm f(), biến n được xem là biến địa phương nhưng lại được dùng trước khi được gán giá trị.
b)Có thể sửa bằng cách đưa n vào hàm khi khai báo hàm f(n), rồi gọi a = f(n).
c)Có thể sửa bằng cách khai báo global n trong hàm f().
d)Không cần sửa gì vì chương trình chắc chắn in ra 16.

Câu 6

(Câu 28.10 trang 59 SBT Tin học 10) Về hai cách sửa chương trình ở Câu 28.10, nhận định nào sau đây đúng hoặc sai?
a)Cách sửa thứ nhất có thể viết def f(n): rồi trong hàm thực hiện n = n + 1 và return n.
b)Khi dùng cách sửa thứ nhất, có thể gọi hàm bằng a = f(n).
c)Cách sửa thứ hai có thể dùng từ khoá global n trong thân hàm f().
d)Khi đã dùng global n thì biến n bên ngoài hàm hoàn toàn không thể thay đổi giá trị.

Câu 7

(Câu 28.11 trang 59 SBT Tin học 10) Viết hàm với đầu vào là list A và số thực x. Hàm cần trả về một list B thu được từ list A bằng cách chỉ lấy các phần tử có giá trị ≥ x. Nhận định nào sau đây đúng hoặc sai?
a)Có thể định nghĩa hàm bằng dòng lệnh def Select(A, x):.
b)Có thể khởi tạo danh sách kết quả bằng B = [].
c)Có thể duyệt các phần tử của A và thêm vào B những phần tử có giá trị >= x.
d)Hàm cần trả về A ban đầu mà không cần xét điều kiện nào.

Câu 8

(Câu 28.11 trang 59 SBT Tin học 10) Về cách viết hàm Select(A, x), nhận định nào sau đây đúng hoặc sai?
a)Có thể dùng vòng lặp for k in range(len(A)) để duyệt các chỉ số của danh sách A.
b)Nếu A[k] >= x thì có thể dùng B.append(A[k]) để thêm phần tử đó vào B.
c)Sau khi duyệt xong danh sách A, cần dùng return B để trả về danh sách kết quả.
d)Nếu A[k] < x thì bắt buộc phải xoá phần tử đó khỏi danh sách A ban đầu.

Câu 9

(Câu 28.12 trang 59 SBT Tin học 10) Viết chương trình nhập từ bàn phím một dãy số nguyên, mỗi số cách nhau bởi dấu cách, chuyển các số này vào list A và in A ra màn hình. Nhận định nào sau đây đúng hoặc sai?
a)Có thể viết một hàm riêng để nhập dữ liệu, ví dụ Nhap_Dulieu().
b)Có thể nhập dãy số bằng lệnh s = input("Nhập các số nguyên cách nhau bởi dấu cách: ").
c)Có thể dùng A = s.split() để tách xâu nhập vào thành danh sách các phần tử dạng xâu.
d)Sau khi dùng split(), các phần tử trong A tự động là số nguyên nên không cần chuyển kiểu.

Câu 10

(Câu 28.12 trang 59 SBT Tin học 10) Về chương trình con tách các phần tử dương và âm từ danh sách A, nhận định nào sau đây đúng hoặc sai?
a)Có thể viết hàm getB(A) để tạo danh sách B gồm các phần tử có giá trị > 0 của A.
b)Có thể viết hàm getC(A) để tạo danh sách C gồm các phần tử có giá trị < 0 của A.
c)Trong mỗi hàm, có thể khởi tạo danh sách rỗng rồi duyệt từng phần tử của A.
d)Danh sách B gồm các phần tử âm, còn danh sách C gồm các phần tử dương.

Câu 11

(Câu 28.12 trang 59 SBT Tin học 10) Về việc dùng biến tổng thể t để đếm số lệnh cơ bản đã thực hiện trong toàn bộ chương trình, nhận định nào sau đây đúng hoặc sai?
a)Có thể khai báo t = 0 ở bên ngoài các hàm.
b)Nếu muốn thay đổi giá trị của t bên trong một hàm, cần khai báo global t trong hàm đó.
c)Trong các chương trình con, có thể tăng t khi thực hiện các phép gán hoặc phép so sánh cần đếm.
d)Nếu không dùng global t mà vẫn gán t = t + 1 trong hàm thì chương trình luôn chạy đúng và tự hiểu t là biến tổng thể.

Câu 12

(Câu 28.12 trang 59 SBT Tin học 10) Về chương trình chính trong bài tách dãy số nguyên thành dãy số dương và dãy số âm, nhận định nào sau đây đúng hoặc sai?
a)Chương trình chính có thể gọi A = Nhap_Dulieu() để nhập và tạo danh sách A.
b)Chương trình chính có thể gọi B = getB(A) và C = getC(A).
c)Có thể in ra Dãy A, Dãy B, Dãy C và số lượng phép gán, phép so sánh đã đếm được.
d)Chương trình chính không thể gọi các hàm đã định nghĩa ở phía trên.