Trắc nghiệm Tin học 10 Kết nối tri thức Bài 27: Tham số của hàm - Đề 02 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: Khi định nghĩa một hàm trong Python bằng từ khóa `def`, các tên biến được liệt kê trong cặp dấu ngoặc đơn sau tên hàm được gọi là gì?
- A. Đối số (Argument)
- B. Tham số (Parameter)
- C. Biến cục bộ (Local variable)
- D. Biến toàn cục (Global variable)
Câu 2: Cho hàm được định nghĩa như sau: `def calculate_area(width, height): return width * height`. Khi gọi hàm này bằng lệnh `area = calculate_area(5, 10)`, giá trị `5` và `10` tại thời điểm gọi hàm được gọi là gì?
- A. Đối số (Argument)
- B. Tham số (Parameter)
- C. Giá trị trả về (Return value)
- D. Biến hàm (Function variable)
Câu 3: Phân tích đoạn mã sau: `def display_info(name, age): print(f"Tên: {name}, Tuổi: {age}")`. Khi thực hiện lời gọi `display_info("An", 16)`, điều gì xảy ra bên trong hàm?
- A. Biến `name` nhận giá trị là số `16`, biến `age` nhận giá trị là xâu `"An"`.
- B. Biến `name` và `age` được tạo nhưng chưa có giá trị cho đến khi được gán bên trong hàm.
- C. Biến `name` nhận giá trị là xâu `"An"`, biến `age` nhận giá trị là số `16`.
- D. Chương trình sẽ báo lỗi do kiểu dữ liệu của đối số không khớp với tham số.
Câu 4: Lời gọi hàm nào sau đây sẽ gây ra lỗi `TypeError` nếu hàm `calculate_sum` được định nghĩa là `def calculate_sum(a, b): return a + b`?
- A. `calculate_sum(10, 20)`
- B. `calculate_sum(a=5, b=7)`
- C. `calculate_sum(100, b=50)`
- D. `calculate_sum(1, 2, 3)`
Câu 5: Xét hàm `def greet(name="Guest"): print(f"Hello, {name}")`. Đây là ví dụ về việc sử dụng loại tham số nào?
- A. Tham số có giá trị mặc định (Default parameter value)
- B. Tham số vị trí (Positional parameter)
- C. Tham số từ khóa (Keyword parameter)
- D. Tham số tùy biến (Variable-length parameter)
Câu 6: Cho hàm `def process_data(data_list, multiplier=1): processed = [x * multiplier for x in data_list]; return processed`. Nếu gọi hàm bằng `result = process_data([1, 2, 3])`, giá trị của `result` sẽ là gì?
- A. `[1, 2, 3]`
- B. `[2, 4, 6]`
- C. `None`
- D. Chương trình báo lỗi do thiếu đối số cho `multiplier`.
Câu 7: Vẫn với hàm `process_data` từ Câu 6, nếu gọi hàm bằng `result = process_data([10, 20], multiplier=2)`, giá trị của `result` sẽ là gì?
- A. `[10, 20]`
- B. `[10, 20, 2]`
- C. `None`
- D. `[20, 40]`
Câu 8: Xét đoạn mã: `def modify_value(x): x = x + 10; print(f"Inside: {x}")`. Biến `a = 5` được khai báo. Sau khi gọi `modify_value(a)`, giá trị của biến `a` (ở ngoài hàm) sẽ là bao nhiêu?
- A. 15
- B. 5
- C. None
- D. Chương trình báo lỗi.
Câu 9: Cho hàm `def modify_list(my_list): my_list.append(99)`. Biến `data = [1, 2, 3]` được khai báo. Sau khi gọi `modify_list(data)`, giá trị của biến `data` (ở ngoài hàm) sẽ là gì? (Lưu ý: List là kiểu dữ liệu có thể thay đổi - mutable).
- A. `[1, 2, 3, 99]`
- B. `[1, 2, 3]`
- C. `[99]`
- D. Chương trình báo lỗi.
Câu 10: Khi truyền đối số cho hàm, Python mặc định sẽ gán các đối số theo thứ tự nào nếu không sử dụng tên tham số?
- A. Theo thứ tự bảng chữ cái của tên tham số.
- B. Theo thứ tự ngẫu nhiên.
- C. Theo thứ tự xuất hiện của các tham số trong định nghĩa hàm.
- D. Theo thứ tự ngược lại của các tham số trong định nghĩa hàm.
Câu 11: Cho hàm `def describe_pet(animal_type, pet_name): print(f"Tôi có một con {animal_type} tên là {pet_name}.")`. Lời gọi hàm nào sau đây sử dụng tham số từ khóa (keyword arguments) một cách đúng đắn?
- A. `describe_pet("chó", "Lucky")`
- B. `describe_pet(pet_name="Meo", "mèo")`
- C. `describe_pet(animal_type="cá", "Goldie")`
- D. `describe_pet(pet_name="Vàng", animal_type="chim")`
Câu 12: Mục đích chính của việc sử dụng tham số trong định nghĩa hàm là gì?
- A. Để làm cho mã nguồn dài hơn và khó đọc hơn.
- B. Để hàm có thể hoạt động với các dữ liệu đầu vào khác nhau, tăng tính tái sử dụng.
- C. Để tạo ra biến toàn cục từ bên trong hàm.
- D. Để bắt buộc người dùng nhập dữ liệu từ bàn phím.
Câu 13: Cho hàm `def print_numbers(a, b, c): print(a, b, c)`. Lời gọi `print_numbers(c=3, a=1, b=2)` sẽ in ra kết quả nào?
- A. `1 2 3`
- B. `3 1 2`
- C. `a b c`
- D. Chương trình báo lỗi.
Câu 14: Xét hàm `def power(base, exp=2): return base ** exp`. Lời gọi `power(3)` sẽ trả về giá trị bao nhiêu?
Câu 15: Vẫn với hàm `power` từ Câu 14, lời gọi `power(4, 3)` sẽ trả về giá trị bao nhiêu?
Câu 16: Khi định nghĩa hàm có cả tham số vị trí và tham số có giá trị mặc định, quy tắc nào sau đây là đúng trong Python?
- A. Tham số có giá trị mặc định phải đứng trước tham số vị trí.
- B. Thứ tự của các loại tham số không quan trọng.
- C. Tham số vị trí phải đứng trước tham số có giá trị mặc định.
- D. Chỉ có thể sử dụng một trong hai loại tham số trong cùng một định nghĩa hàm.
Câu 17: Cho hàm `def calculate(x, y, z=0): return x + y + z`. Lời gọi nào sau đây sẽ gây lỗi?
- A. `calculate(1, 2)`
- B. `calculate(1, 2, 3)`
- C. `calculate(y=2, x=1)`
- D. `calculate(1, 2, 3, 4)`
Câu 18: Phân tích đoạn mã: `def process(data): data = data + [100]; print(data)`. Nếu `my_list = [1, 2, 3]` và sau đó gọi `process(my_list)`, giá trị của `my_list` bên ngoài hàm có thay đổi không? Vì sao?
- A. Có, vì list là mutable và hàm đã thêm phần tử 100 vào list.
- B. Không, vì phép gán `data = data + [100]` tạo ra một list mới bên trong hàm, không ảnh hưởng đến list gốc bên ngoài.
- C. Có, vì biến `data` bên trong hàm là tham chiếu đến `my_list` bên ngoài.
- D. Không, vì hàm không có câu lệnh `return`.
Câu 19: Điều gì xảy ra nếu bạn cố gắng truy cập một tham số của hàm (ví dụ `name` trong `def greet(name): ...`) từ bên ngoài hàm?
- A. Sẽ xảy ra lỗi `NameError` vì tham số chỉ tồn tại trong phạm vi (scope) của hàm.
- B. Bạn có thể truy cập được giá trị của tham số nếu hàm đã được gọi trước đó.
- C. Tham số tự động trở thành biến toàn cục sau khi hàm kết thúc.
- D. Giá trị của tham số sẽ là `None` khi truy cập từ bên ngoài.
Câu 20: Cho hàm `def apply_func(x, func): return func(x)`. Hàm này minh họa cho việc có thể truyền gì làm đối số?
- A. Chỉ có thể truyền số nguyên.
- B. Chỉ có thể truyền chuỗi văn bản.
- C. Có thể truyền một hàm khác làm đối số.
- D. Chỉ có thể truyền các biến toàn cục.
Câu 21: Khi sử dụng kết hợp tham số vị trí và tham số từ khóa trong lời gọi hàm, quy tắc nào phải tuân thủ?
- A. Tham số từ khóa phải đứng trước tham số vị trí.
- B. Tham số vị trí phải đứng trước tham số từ khóa.
- C. Thứ tự không quan trọng.
- D. Không thể sử dụng cả hai loại trong cùng một lời gọi hàm.
Câu 22: Cho hàm `def calculate_discount(price, rate=0.1): return price * (1 - rate)`. Lời gọi nào sau đây sẽ trả về giá trị chiết khấu cho sản phẩm giá 100 với tỷ lệ 15%?
- A. `calculate_discount(100)`
- B. `calculate_discount(100, 15)`
- C. `calculate_discount(rate=0.15, 100)`
- D. `calculate_discount(100, 0.15)`
Câu 23: Xét đoạn mã: `def process_data(data): data.sort()`. Biến `my_list = [3, 1, 2]` được khai báo. Sau khi gọi `process_data(my_list)`, giá trị của biến `my_list` (ở ngoài hàm) sẽ là gì? (Lưu ý: `list.sort()` sắp xếp list tại chỗ).
- A. `[1, 2, 3]`
- B. `[3, 1, 2]`
- C. `None`
- D. Chương trình báo lỗi.
Câu 24: Điều gì xảy ra nếu bạn định nghĩa một hàm với tham số có giá trị mặc định đứng trước một tham số vị trí, ví dụ: `def my_func(a=1, b): ...`?
- A. Hàm hoạt động bình thường.
- B. Python tự động hoán đổi vị trí của các tham số.
- C. Sẽ xảy ra lỗi `SyntaxError` khi định nghĩa hàm.
- D. Lỗi chỉ xảy ra khi gọi hàm.
Câu 25: Phân tích sự khác nhau cơ bản giữa tham số và đối số.
- A. Tham số là giá trị, đối số là tên biến.
- B. Tham số là tên biến trong định nghĩa hàm, đối số là giá trị được truyền vào khi gọi hàm.
- C. Tham số chỉ dùng cho biến toàn cục, đối số dùng cho biến cục bộ.
- D. Tham số chỉ có trong hàm không có giá trị trả về, đối số chỉ có trong hàm có giá trị trả về.
Câu 26: Cho hàm `def example(p1, p2, p3=10): print(p1, p2, p3)`. Lời gọi nào sau đây là hợp lệ?
- A. `example(5, 8)`
- B. `example(5)`
- C. `example(p3=5, p2=8)`
- D. `example(p1=5, 8)`
Câu 27: Khi một hàm được gọi, các tham số của hàm sẽ nhận giá trị từ các đối số. Các tham số này tồn tại trong phạm vi nào?
- A. Phạm vi toàn cục (Global scope).
- B. Phạm vi cục bộ của hàm (Local scope of the function).
- C. Phạm vi của module chứa hàm.
- D. Phạm vi của lớp (Class scope), nếu là phương thức.
Câu 28: Giả sử bạn cần viết một hàm tính diện tích hình tròn với bán kính là đầu vào. Định nghĩa hàm nào sau đây sử dụng tham số một cách phù hợp?
- A. `def calculate_circle_area(): radius = 5; return 3.14 * radius ** 2`
- B. `def calculate_circle_area(area): radius = input("Enter radius: "); area = 3.14 * float(radius) ** 2`
- C. `def calculate_circle_area(radius): return 3.14 * radius ** 2`
- D. `def calculate_circle_area(radius, area): area = 3.14 * radius ** 2`
Câu 29: Cho đoạn mã: `def divide(a, b): if b == 0: print("Cannot divide by zero"); return None; else: return a / b`. Lời gọi `result = divide(10, 0)` sẽ dẫn đến điều gì?
- A. Chương trình báo lỗi `ZeroDivisionError`.
- B. Chương trình in ra `Cannot divide by zero` và biến `result` có giá trị là `10 / 0`.
- C. Chương trình báo lỗi `TypeError`.
- D. Chương trình in ra `Cannot divide by zero` và biến `result` có giá trị là `None`.
Câu 30: Bạn muốn tạo một hàm `greet` nhận tên và tuổi. Nếu tuổi không được cung cấp, mặc định là 18. Định nghĩa hàm nào sau đây là đúng?
- A. `def greet(age=18, name): ...`
- B. `def greet(name, age=18): ...`
- C. `def greet(name=None, age=18): ...`
- D. `def greet(name, age): age = 18 if age is None else age; ...`