Chuyển tới nội dung chính

Bài tập Hàm (Function)

Chủ đề: def, tham số, giá trị mặc định, *args, **kwargs, return, hàm đệ quy, lambda.


Phần 1 – Trắc Nghiệm

Câu 1. Hàm sau trả về giá trị gì?

def tinh(a, b=5):
return a + b

print(tinh(3))
  • A. 3
  • B. 5
  • C. 8
  • D. Lỗi

Câu 2. lambda x: x * x tương đương với hàm nào?

  • A. def f(x): x * x
  • B. def f(x): return x * x
  • C. def f(): return x * x
  • D. Không có hàm tương đương

Câu 3. Kết quả của đoạn code sau?

def dem(*args):
return len(args)

print(dem(1, 2, 3, 4, 5))
  • A. args
  • B. 5
  • C. (1, 2, 3, 4, 5)
  • D. Lỗi

Phần 2 – Điền Khuyết

Bài 1. Điền để hoàn thành hàm tính giai thừa đệ quy:

def giai_thua(n):
if n ___ 1:
return 1
return n * giai_thua(___)

print(giai_thua(5)) # 120
Đáp án
def giai_thua(n):
if n <= 1:
return 1
return n * giai_thua(n - 1)

Phần 3 – Lập Trình Thực Hành

Bài 1 – Tính diện tích các hình

Viết các hàm tính diện tích: hình tròn, hình chữ nhật, hình tam giác.

Đáp án mẫu
import math

def dien_tich_hinh_tron(r):
return math.pi * r ** 2

def dien_tich_hinh_chu_nhat(dai, rong):
return dai * rong

def dien_tich_tam_giac(day, chieu_cao):
return 0.5 * day * chieu_cao

r = float(input("Bán kính: "))
print(f"Diện tích hình tròn: {dien_tich_hinh_tron(r):.2f}")

d, r2 = map(float, input("Chiều dài, chiều rộng: ").split())
print(f"Diện tích hình chữ nhật: {dien_tich_hinh_chu_nhat(d, r2):.2f}")

day, cao = map(float, input("Đáy, chiều cao: ").split())
print(f"Diện tích tam giác: {dien_tich_tam_giac(day, cao):.2f}")

Bài 2 – Kiểm tra palindrome

Viết hàm kiểm tra chuỗi có phải palindrome (đọc xuôi ngược như nhau) không.

Ví dụ: "racecar", "level", "121" là palindrome.

Đáp án mẫu
def la_palindrome(s):
s = s.lower().replace(" ", "")
return s == s[::-1]

chuoi = input("Nhập chuỗi: ")
if la_palindrome(chuoi):
print(f'"{chuoi}" là palindrome ')
else:
print(f'"{chuoi}" không phải palindrome ')

Bài 3 – Đệ quy: dãy Fibonacci

Viết hàm đệ quy tính số Fibonacci thứ n.

Lưu ý: Thêm bộ nhớ đệm (memoization) để tối ưu hiệu suất.

Đáp án mẫu
from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)

n = int(input("Tính Fibonacci thứ n (n = ): "))
print(f"Fibonacci({n}) = {fib(n)}")

Bài 4 – Máy tính đơn giản

Viết trình máy tính với các hàm: cong, tru, nhan, chia. Người dùng chọn phép tính.

Đáp án mẫu
def cong(a, b): return a + b
def tru(a, b): return a - b
def nhan(a, b): return a * b
def chia(a, b): return a / b if b != 0 else "Lỗi: Chia cho 0"

phep_tinh = {'+': cong, '-': tru, '*': nhan, '/': chia}

a = float(input("Nhập số a: "))
toan_tu = input("Nhập phép tính (+, -, *, /): ")
b = float(input("Nhập số b: "))

if toan_tu in phep_tinh:
ket_qua = phep_tinh[toan_tu](a, b)
print(f"Kết quả: {a} {toan_tu} {b} = {ket_qua}")
else:
print("Phép tính không hợp lệ!")

Tiếp theo: 5 – List & Dictionary