Giải Tin học 10 – Bài 28. Phạm vi của biến – KNTT

1. Phạm vi của biến khai báo trong hàm

Câu 1. Giả sử có các lệnh sau:

a, b = 1, 2
def f(a,b):
    a = a + b
    b = b * a
    return a + b

Giá trị của a, b bằng bao nhiêu sau khi thực hiện lệnh sau:
a) f(1,2)
b) f(10,20)

Câu 2. Ta 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?

Hướng dẫn giải:

Câu 1: Giá trị của a và b là
a) a = 1, b = 2
b) a = 1, b = 2

Câu 2: Có, ta 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 vì tất cả các biến khai báo trong hàm đều có tính địa phương và không có hiệu lực bên ngoài hàm.

2. Phạm vi của biến khai báo ngoài hàm

Câu hỏi: Giả sử hàm f(x,y) được định nghĩa như sau:

def f(x,y):
    a = 2*(x + y)
    print(a + n)

Kết quả nào được in ra khi thực hiện các lệnh sau:
n = 10
f(1,2)

Hướng dẫn giải: Kết quả in ra là 16

Luyện tập

Câu 1. Viết hàm với đầu vào, đầu ra như sau:
– Đầu vào là danh sách sList, các phần tử là xâu kí tự.
– Đầu ra là danh sách cList, các phần tử là kí tự đầu tiên của các xâu kí tự tương ứng trong danh sách sList.

Câu 2. Viết hàm Tach_day() với đầu vào là danh sách A, đầu ra là hai danh sách B, C được mô tả như sau:
– Danh sách B thu được từ A bằng cách lấy ra các phần tử có chỉ số chẵn.
– Danh sách B thu được từ A bằng cách lấy ra các phần tử có chỉ số lẻ.

Hướng dẫn giải:

Câu 1: Chương trình như sau

#Hàm cFirst thỏa mãn đầu ra
def cFirst(sList):
    cList = []
    aList = sList.split()
    for ch in aList:
        cList.append(ch[0])
    return cList

#Chương trình chính
s = input("Mời nhập xâu: ")
print("Các kí tự đầu của các phần tử là:")
print(cFirst(s))

Câu 2: Chương trình như sau

#Hàm Tach_day
def Tach_day(A):
    n = len(A)
    B, C = [], []
    for i in range(n):
        if i%2==0: B.append(A[i])
        else: C.append(A[i])
    #Hàm trả về 2 danh sách
    return B, C
#Chương trình chính
A = list(map(float,input("Mời nhập danh sách A: ").split()))
B, C = Tach_day(A)
print("Hai danh sách B và C lần lượt là:")
print(B, C)

Vận dụng

Câu 1. Viết hàm có hai tham số đầu vào là m, n. Đầu ra trả lại hai giá trị là:
– ƯCLN của m, n
– Bội chung nhỏ nhất (BCNN) của m, n.
Gợi ý: Sử dụng công thức ƯCLN(m,n) x BCNN(m,n) = m x n.

Câu 2. Viết chương trình nhập ba số tự nhiên từ bàn phím day, month, year, các số cách nhau bởi dấu cách. Các số này biểu diễn giá trị của ngày, tháng, năm nào đó. Chương trình cần kiểm tra và in ra thông báo số liệu đã nhập vào có hợp lệ hay không.

Hướng dẫn giải:

Câu 1: Chương trình như sau

#Hàm trả về ƯCLN và BCNN
def UCBC(m,n):
    tich = m * n
    while m != n:
        if m>n: m -= n
        else: n -= m
    #Thay tich/m thành tich//m để trả về số nguyên
    return m, tich//m

#Chương trình chính
m, n = map(int,input("Mời nhập 2 số nguyên dương: ").split())
ucln, bcnn = UCBC(m,n)
print("Ước chung lớn nhất là:",ucln)
print(f"Bội chung nhỏ nhất là:",bcnn)

Câu 2: Chương trình như sau

#Hàm kiểm tra ngày tháng năm hợp lệ không
def testDate(d,m,y):
    #Nếu ngày, tháng, năm âm
    if d<1 or m<1 or y<1: return False
    #Nếu tháng > 12 và ngày > 31
    if m>12 or d>31: return False
    #Kiểm tra tháng có bao nhiêu ngày
    if m==2:
        #Kiểm tra năm nhuận
        if y%400==0 or (y%4==0 and y%100!=0): dmax = 29
        else: dmax = 28
    elif str(m) in "135781012": dmax = 31
    elif str(m) in "46911": dmax = 30

    #Kiểm tra số ngày có hợp lệ theo tháng
    if d > dmax: return False
    else: return True

#Chương trình chính
day, month, year = map(int,input("Mời nhập ngày, tháng, năm: ").split())
if testDate(day,month,year):
    print("Ngày tháng năm hợp lệ")
else:
    print("Ngày tháng năm không hợp lệ")

Lưu ý:
– Để làm được bài kiểm tra ngày tháng năm hợp lệ không em cần biết một số kiến thức như sau:
+ Ngày tháng năm phải đều không nhỏ hơn 1, ngày không lớn hơn 31, tháng không lớn hơn 12
+ Tất cả các tháng 1, 3, 5, 7, 8, 10 và 12 đều có 31 ngày
+ Tất cả các tháng 4, 6, 9, 11 đều có 30 ngày
+ Tháng 2 có 28 hoặc 29 ngày, nếu năm nhuận thì có 29 ngày, ngược lại có 28 ngày.
+ Kiểm tra năm nhuận hay không: Năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100 là năm nhuận, ngược lại là năm không nhuận.
– Hàm sẽ trả về giá trị và thoát khỏi hàm ngay khi gặp câu lệnh return

Xem thêm Bài 29. Nhận biết lỗi chương trình

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *