Chương 1: Khái niệm về hàm và ứng dụng của hàm trong lập trình Python
1.1 Khái niệm về hàm
Trong lập trình, hàm là một khối mã chương trình thực hiện một nhiệm vụ cụ thể. Hàm được sử dụng để tái sử dụng mã, giúp chương trình dễ dàng bảo trì và mở rộng. Trong Python, chúng ta có thể định nghĩa hàm bằng từ khóa def và sử dụng chúng bằng cách gọi tên hàm.
Cú pháp định nghĩa hàm:
def ten_ham(tham_so):
# Thân hàm
return ket_qua
1.2 Ứng dụng của hàm trong lập trình Python
Hàm trong Python có nhiều ứng dụng, bao gồm:
Tạo các chức năng cụ thể để giải quyết các vấn đề cụ thể.
Tạo các thư viện và modules để tái sử dụng code.
Tạo các test cases để kiểm tra code.
Tạo các giao diện người dùng (GUI) sử dụng thư viện như Tkinter.
Chương 2: Input/Output trong hàm
2.1 Input trong hàm
Hàm có thể nhận tham số đầu vào, được gọi là tham số hàm. Tham số này sẽ được sử dụng trong hàm để thực hiện các phép tính hoặc xử lý dữ liệu.
Ví dụ:
def tinh_tong(a, b):
tong = a + b
return tong
Trong ví dụ trên, a và b là tham số đầu vào của hàm tinh_tong.
2.2 Output trong hàm
Hàm có thể trả về một giá trị đầu ra, được gọi là giá trị trả về. Để trả về giá trị, chúng ta sử dụng từ khóa return.
Ví dụ:
def tinh_tong(a, b):
tong = a + b
return tong
Trong ví dụ trên, hàm tinh_tong trả về giá trị tổng của a và b.
Chương 3: Khái niệm Chia để trị trong lập trình
3.1 Khái niệm Chia để trị
Chia để trị là một kỹ thuật lập trình chia một vấn đề lớn thành các vấn đề con nhỏ hơn, sau đó giải quyết các vấn đề con này và kết hợp kết quả để giải quyết vấn đề ban đầu. Chia để trị thường được sử dụng trong việc giải các bài toán phức tạp và hiệu quả.
Ví dụ: Sắp xếp mảng theo thuật toán Merge Sort
def merge_sort(arr):
if len(arr) <= 1:
return arr
middle = len(arr) // 2
left_half = arr[:middle]
right_half = arr[middle:]
left_half = merge_sort(left_half)
right_half = merge_sort(right_half)
return merge(left_half, right_half)
3.2 Ứng dụng Chia để trị trong Python
Chia để trị có thể được áp dụng trong nhiều lĩnh vực như sắp xếp, tìm kiếm, xử lý dữ liệu lớn và nhiều bài toán phức tạp khác. Kỹ thuật này giúp giảm độ phức tạp của bài toán và dễ dàng thực hiện các bước xử lý.
Chương 4: Ưu điểm về tính tái sử dụng của hàm
Ưu điểm lớn nhất của việc sử dụng hàm trong lập trình là tính tái sử dụng. Bằng cách đóng gói một phần mã trong hàm, chúng ta có thể sử dụng lại nó ở nhiều nơi khác nhau trong chương trình hoặc trong các dự án khác nhau. Điều này giúp giảm thiểu sự trùng lặp mã và dễ dàng bảo trì mã nguồn.
Ví dụ:
def tinh_tong(a, b):
tong = a + b
return tong
# Sử dụng lại hàm tinh_tong ở nhiều nơi trong chương trình
x = 5
y = 10
ket_qua = tinh_tong(x, y)
print("Tổng:", ket_qua)
Ưu điểm khác của tính tái sử dụng là giúp tạo ra các thư viện và modules có thể sử dụng lại trong nhiều dự án khác nhau, giúp tiết kiệm thời gian và công sức trong việc phát triển phần mềm.
Kết luận
Hàm là một khía cạnh quan trọng trong lập trình Python và có nhiều ứng dụng và ưu điểm. Hi vọng tài liệu này giúp bạn hiểu rõ hơn về khái niệm hàm, cách sử dụng chúng, cũng như cách áp dụng chia để trị và tirng lợi
của tính tái sử dụng hàm trong lập trình Python.
Tất cả các hàm trong Python phải tuân thủ một cấu trúc câu lệnh cụ thể, và việc sử dụng từ khoá "def" trong khai báo hàm là một phần quan trọng của cấu trúc này. Ngoài ra, có quy ước về cách đặt tên hàm để làm cho mã nguồn dễ đọc và dễ hiểu hơn.
1. Cấu trúc câu lệnh về hàm trong Python:
Cấu trúc câu lệnh của một hàm trong Python bao gồm:
Từ khoá "def": Đây là từ khoá bắt buộc để định nghĩa một hàm. Nó luôn phải đi đầu trong một dòng khai báo hàm.
Tên hàm: Sau từ khoá "def," bạn cần đặt tên cho hàm. Tên này phải tuân theo các quy tắc cụ thể về đặt tên hàm (xem phần sau).
Tham số (nếu có): Bạn có thể khai báo các tham số của hàm bên trong dấu ngoặc đơn sau tên hàm. Tham số là các giá trị đầu vào mà hàm sẽ sử dụng trong quá trình thực hiện công việc của nó.
Thân hàm: Thân của hàm là một khối mã chương trình nằm trong dấu hai chấm (:) và được thụ động bởi thụ động bằng cách thụ động lùi vào. Đoạn mã trong thân hàm thực hiện các công việc cụ thể và có thể chứa lệnh điều kiện, vòng lặp, và các biểu thức khác.
Từ khoá "return" (tuỳ chọn): Nếu bạn muốn hàm trả về một giá trị, bạn sử dụng từ khoá "return" để chỉ định giá trị trả về. Nếu không có từ khoá "return," hàm sẽ trả về None mặc định.
2. Từ khoá "def" trong khai báo hàm:
Từ khoá "def" là một phần quan trọng của cú pháp để định nghĩa hàm trong Python. Nó là từ khoá bắt buộc và luôn đi đầu trong câu lệnh định nghĩa hàm. Đây là cú pháp đầy đủ của câu lệnh khai báo hàm:
def ten_ham(tham_so):
# Thân hàm
return ket_qua
"def": Đây là từ khoá để bắt đầu khai báo hàm.
"ten_ham": Đây là tên của hàm bạn muốn đặt.
"tham_so" (tuỳ chọn): Nếu hàm cần tham số đầu vào, bạn sẽ liệt kê chúng sau tên hàm trong dấu ngoặc đơn.
"thân hàm": Đây là phần chứa mã chương trình của hàm, nơi bạn định nghĩa công việc mà hàm sẽ thực hiện.
"return" (tuỳ chọn): Nếu hàm trả về một giá trị, bạn sẽ sử dụng từ khoá "return" để chỉ định giá trị trả về.
3. Coding Convention trong việc đặt tên hàm:
Trong Python, có một số quy ước về cách đặt tên hàm để làm cho mã nguồn dễ đọc và hiểu hơn:
Tên hàm nên sử dụng chữ thường và được phân tách bằng dấu gạch dưới (_) nếu tên có nhiều từ, ví dụ: tinh_tong, tim_kiem.
Tên hàm nên mô tả mục đích hoặc công việc của nó một cách rõ ràng. Hãy tránh sử dụng các tên hàm ngắn gọn và không mô tả.
Nếu tên hàm có nhiều từ, bạn có thể sử dụng kiểu "snake_case" để phân tách các từ, ví dụ: tinh_tong_cac_so.
Tránh sử dụng tên hàm trùng lặp với các từ khoá đã có trong Python như print, for, while,…
Luôn tuân theo quy tắc về đặt tên và sử dụng các từ thích hợp để làm cho mã nguồn dễ đọc và dễ hiểu.
Ví dụ về đúng quy tắc đặt tên hàm:
def tinh_tong(a, b):
return a + b
def tim_gia_tri_lon_nhat(lst):
return max(lst)
Những quy ước về cấu trúc câu lệnh hàm và đặt tên hàm này giúp làm cho mã Python của bạn dễ đọc, dễ bảo trì và dễ hiểu hơn cho bạn và các thành viên khác trong dự án.
Parameter (tham số) của hàm là các giá trị đầu vào mà bạn có thể truyền cho một hàm khi bạn gọi nó. Tham số giúp hàm nhận dữ liệu hoặc thông tin cần thiết để thực hiện một nhiệm vụ cụ thể. Tham số được đặt trong dấu ngoặc đơn sau tên hàm khi bạn định nghĩa hàm.
Dưới đây là một ví dụ về cách định nghĩa một hàm với tham số và cách sử dụng tham số khi gọi hàm:
def in_thong_tin(ten, tuoi):
print(f"Tên: {ten}")
print(f"Tuổi: {tuoi}")
# Gọi hàm và truyền tham số
in_thong_tin("Alice", 25)
in_thong_tin("Bob", 30)
Trong ví dụ trên, hàm in_thong_tin có hai tham số: ten và tuoi. Khi gọi hàm in_thong_tin, chúng ta truyền giá trị cho hai tham số này (ví dụ: "Alice" và 25 trong lần gọi đầu tiên) và hàm sẽ sử dụng các giá trị này để in ra thông tin tương ứng.
Có một số điểm quan trọng về tham số của hàm:
Tham số có thể được định nghĩa trong bất kỳ số lượng và bất kỳ loại dữ liệu nào.
Tham số có thể được sử dụng bên trong thân hàm để thực hiện các phép tính hoặc xử lý dữ liệu.
Khi gọi hàm, bạn cần truyền đúng số lượng tham số và theo đúng thứ tự mà hàm định nghĩa.
Bạn có thể sử dụng các biến hoặc giá trị cụ thể khi truyền tham số vào hàm.
Tham số giúp làm cho hàm trở nên linh hoạt và có thể tái sử dụng, vì bạn có thể truyền các giá trị khác nhau vào hàm để thực hiện các tác vụ khác nhau.
Trong lập trình Python, có hai loại hàm quan trọng: hàm trả về và hàm không trả về. Sự khác biệt chính giữa chúng nằm ở việc liệu hàm có trả về một giá trị hay không sau khi thực hiện nhiệm vụ của nó.
Hàm Trả Về (Function with Return Value):
Hàm trả về là loại hàm có khả năng trả về một giá trị sau khi thực hiện nhiệm vụ của nó. Điều này được thực hiện bằng cách sử dụng từ khoá return để chỉ định giá trị mà hàm sẽ trả về. Hàm trả về thường được sử dụng để tính toán kết quả hoặc xử lý dữ liệu và sau đó trả về kết quả cho người dùng hoặc cho các phần của chương trình khác sử dụng.
Dưới đây là một ví dụ về hàm trả về:
def tinh_tong(a, b):
tong = a + b
return tong
ket_qua = tinh_tong(5, 10)
print("Tổng:", ket_qua)
Trong ví dụ này, hàm tinh_tong tính tổng của hai số a và b, sau đó trả về kết quả bằng từ khoá return. Giá trị trả về được lưu trong biến ket_qua và sau đó được in ra màn hình.
Hàm Không Trả Về (Function without Return Value):
Hàm không trả về là loại hàm mà sau khi thực hiện nhiệm vụ của nó, không trả về bất kỳ giá trị nào. Thay vào đó, hàm này có thể chỉ thực hiện các tác vụ phụ, hiệu chỉnh dữ liệu, hoặc thực hiện một số công việc mà không cần trả về giá trị.
Dưới đây là một ví dụ về hàm không trả về:
def in_hello():
print("Hello, world!")
in_hello()
Hàm in_hello trong ví dụ này chỉ đơn giản là in ra dòng chữ "Hello, world!" mà không trả về bất kỳ giá trị nào.
Từ Khoá "return" trong Python:
Từ khoá return được sử dụng để trả về giá trị từ hàm. Nó có thể được sử dụng bất cứ khi nào bạn muốn kết thúc thực hiện hàm và trả về một giá trị cụ thể cho người dùng hoặc các phần khác của chương trình. Sau khi một hàm gặp từ khoá return, nó sẽ thoát ra khỏi hàm và trả về giá trị đã chỉ định.
Phân Biệt Hàm Trả Về và Hàm Không Trả Về:
Hàm trả về có từ khoá return và trả về một giá trị cụ thể, trong khi hàm không trả về không có từ khoá return hoặc chỉ có từ khoá return mà không có giá trị sau nó.
Hàm trả về thường được sử dụng để tính toán và trả về kết quả, trong khi hàm không trả về thường được sử dụng để thực hiện các tác vụ phụ.
Khi bạn gọi một hàm trả về, bạn thường cần lưu giá trị trả về trong một biến hoặc sử dụng giá trị đó cho các mục đích khác. Trong trường hợp hàm không trả về, bạn chỉ cần gọi nó để thực hiện công việc của nó mà không cần quan tâm đến giá trị trả về.
Thực Thi Hàm trong Python:
Để thực thi (gọi) một hàm trong Python, bạn chỉ cần sử dụng tên hàm kèm theo các tham số cần thiết, nếu có, và đặt chúng trong dấu ngoặc đơn. Khi một hàm được gọi, Python sẽ thực hiện các câu lệnh bên trong hàm và trả về giá trị nếu hàm đó có từ khoá return.
Dưới đây là một ví dụ về cách thực thi hàm trong Python:
def tinh_tong(a, b):
tong = a + b
return tong
ket_qua = tinh_tong(5, 10)
print("Kết quả:", ket_qua)
Trong ví dụ này, hàm tinh_tong được gọi với các tham số là 5 và 10, sau đó giá trị trả về được lưu trong biến ket_qua và in ra màn hình.
Lưu Ý về Giá Trị Trả Về của Hàm trong Python:
Dưới đây là một số lưu ý quan trọng về giá trị trả về của hàm trong Python:
Một hàm có thể có hoặc không có giá trị trả về. Nếu hàm không chứa từ khoá return, nó mặc định trả về giá trị None.
Nếu hàm chứa từ khoá return, nó sẽ trả về giá trị cụ thể được chỉ định bởi từ khoá return. Ví dụ: return 42 sẽ trả về giá trị 42.
Hàm có thể trả về một giá trị duy nhất. Nếu bạn cố gắng trả về nhiều giá trị bằng cách sử dụng return nhiều lần, chỉ giá trị đầu tiên sẽ được trả về và các giá trị sau sẽ bị bỏ qua.
Khi gọi hàm, bạn có thể lưu giá trị trả về vào một biến để sử dụng sau này hoặc in ra màn hình ngay lập tức.
Nếu hàm không có từ khoá return, nó sẽ trả về None tự động. Bạn cần chú ý điều này khi sử dụng giá trị trả về của hàm.
Các hàm có thể trả về các loại dữ liệu khác nhau, bao gồm số nguyên, số thực, chuỗi, danh sách, và nhiều kiểu dữ liệu khác.
Điều quan trọng là kiểm tra giá trị trả về của hàm nếu bạn muốn sử dụng kết quả từ hàm đó trong mã của bạn.
Tách hàm trong Python là một phương pháp quan trọng để cải thiện sự tổ chức và độ đọc của mã nguồn. Khi bạn tách hàm, bạn chia đoạn code lớn thành các phần nhỏ hơn có mục tiêu cụ thể. Điều này giúp mã nguồn trở nên dễ quản lý hơn, dễ bảo trì và dễ hiểu hơn. Tách hàm cũng có thể được áp dụng để đảm bảo chia để trị trong mã nguồn dài. Dưới đây là cách bạn có thể tách hàm và xác định đầu vào và đầu ra của chúng:
Cách Tách Hàm:
Xác định nhiệm vụ cụ thể của hàm: Trước tiên, bạn nên xác định mục tiêu cụ thể mà bạn muốn hàm thực hiện. Điều này giúp bạn đảm bảo rằng hàm chỉ thực hiện một nhiệm vụ duy nhất và dễ dàng kiểm tra và bảo trì.
Đặt tên cho hàm: Đặt tên hàm phản ánh chính xác nhiệm vụ của nó. Tên hàm nên rõ ràng và mô tả công việc của nó.
Xác định đầu vào và đầu ra: Xác định các tham số (đầu vào) mà hàm cần để thực hiện nhiệm vụ của mình và xác định giá trị hàm sẽ trả về (đầu ra).
Viết mã trong hàm: Viết mã chương trình bên trong hàm để thực hiện nhiệm vụ đã xác định. Hãy chắc chắn rằng hàm chỉ thực hiện công việc cụ thể và không có các hoạt động khác.
Gọi hàm: Gọi hàm bằng cách sử dụng tên hàm kèm theo các đối số thích hợp.
Xác Định Input/Output Khi Tách Hàm:
Khi bạn tách hàm, xác định đầu vào và đầu ra của hàm là một phần quan trọng để hiểu cách hàm hoạt động và cách sử dụng nó trong chương trình. Dưới đây là cách bạn có thể xác định đầu vào và đầu ra:
Xác định đầu vào (Input):
Đầu vào là các tham số mà hàm cần để thực hiện nhiệm vụ của nó.
Xác định loại dữ liệu và số lượng của mỗi đầu vào.
Đặt tên rõ ràng cho các đầu vào để làm cho mã nguồn dễ đọc và dễ hiểu hơn.
Truyền giá trị thích hợp cho các đầu vào khi gọi hàm.
Xác định đầu ra (Output):
Đầu ra là giá trị mà hàm trả về sau khi thực hiện công việc của nó.
Xác định loại dữ liệu của đầu ra.
Đặt tên rõ ràng cho đầu ra để mô tả thông tin nó chứa.
Sử dụng từ khoá return để chỉ định giá trị đầu ra trong hàm.
Ví dụ:
def tinh_tong(a, b):
"""
Hàm này tính tổng của hai số a và b.
:param a: Số nguyên thứ nhất
:param b: Số nguyên thứ hai
:return: Tổng của a và b (số nguyên)
"""
tong = a + b
return tong
Trong ví dụ này, a và b là đầu vào và tong là đầu ra của hàm tinh_tong. Các thông tin về đầu vào và đầu ra được xác định trong docstring của hàm để làm cho mã nguồn dễ đọc và hiểu hơn.
Hãy xem xét một ví dụ về việc tách hàm và không tách hàm trong một tác vụ lập trình game Hangman.
Không Tách Hàm:
Trước tiên, chúng ta sẽ xem xét một cách tiếp cận không tách hàm, trong đó toàn bộ logic của trò chơi Hangman được viết trong một khối lớn duy nhất:
import random
def chon_tu_ngau_nhien():
tu_khoa = ["apple", "banana", "cherry", "dog", "elephant"]
return random.choice(tu_khoa)
def choi_hangman():
tu_can_doan = chon_tu_ngau_nhien()
tu_da_doan = ["_"] * len(tu_can_doan)
so_lan_sai = 0
while "_" in tu_da_doan and so_lan_sai < 6:
hien_thi_tu(tu_da_doan)
thu_doan = input("Hãy đoán một chữ cái: ").lower()
if len(thu_doan) == 1 and thu_doan.isalpha():
if thu_doan in tu_can_doan:
for i in range(len(tu_can_doan)):
if thu_doan == tu_can_doan[i]:
tu_da_doan[i] = thu_doan
else:
so_lan_sai += 1
hien_thi_man_hinh(so_lan_sai)
else:
print("Vui lòng nhập một chữ cái hợp lệ!")
if "_" not in tu_da_doan:
print("Chúc mừng! Bạn đã chiến thắng!")
else:
print(f"Rất tiếc! Từ cần đoán là '{tu_can_doan}'.")
def hien_thi_tu(tu_da_doan):
print("Từ: " + " ".join(tu_da_doan))
def hien_thi_man_hinh(so_lan_sai):
# Đoạn mã để hiển thị hình treo cổ và số lần sai.
# Gọi hàm chơi Hangman
choi_hangman()
Tách Hàm:
Trong cách tiếp cận này, chúng ta đã tách hàm thành các phần riêng biệt, giúp mã nguồn trở nên dễ đọc và dễ quản lý hơn:
import random
def chon_tu_ngau_nhien():
tu_khoa = ["apple", "banana", "cherry", "dog", "elephant"]
return random.choice(tu_khoa)
def choi_hangman():
tu_can_doan = chon_tu_ngau_nhien()
tu_da_doan = ["_"] * len(tu_can_doan)
so_lan_sai = 0
while "_" in tu_da_doan and so_lan_sai < 6:
hien_thi_tu(tu_da_doan)
thu_doan = nhan_thu_doan()
if thu_doan in tu_can_doan:
cap_nhat_tu_da_doan(tu_can_doan, tu_da_doan, thu_doan)
else:
so_lan_sai += 1
hien_thi_man_hinh(so_lan_sai)
hien_thi_ket_qua(tu_can_doan, tu_da_doan)
def hien_thi_tu(tu_da_doan):
print("Từ: " + " ".join(tu_da_doan))
def nhan_thu_doan():
thu_doan = input("Hãy đoán một chữ cái: ").lower()
while not thu_doan.isalpha() or len(thu_doan) != 1:
print("Vui lòng nhập một chữ cái hợp lệ!")
thu_doan = input("Hãy đoán một chữ cái: ").lower()
return thu_doan
def cap_nhat_tu_da_doan(tu_can_doan, tu_da_doan, thu_doan):
for i in range(len(tu_can_doan)):
if thu_doan == tu_can_doan[i]:
tu_da_doan[i] = thu_doan
def hien_thi_man_hinh(so_lan_sai):
# Đoạn mã để hiển thị hình treo cổ và số lần sai.
def hien_thi_ket_qua(tu_can_doan, tu_da_doan):
if "_" not in tu_da_doan:
print("Chúc mừng! Bạn đã chiến thắng!")
else:
print(f"Rất tiếc! Từ cần đoán là '{tu_can_doan}'.")
# Gọi hàm chơi Hangman
choi_hangman()
Trong phiên bản này, chúng ta đã tách hàm thành các phần như nhan_thu_doan(), cap_nhat_tu_da_doan(), và hien_thi_man_hinh(), giúp mã nguồn trở nên dễ quản lý và dễ hiểu hơn. Điều này cũng cho phép bạn tập trung vào việc cải thiện logic của từng phần một mà không cần xem xét toàn bộ mã game Hangman.
Python cung cấp nhiều hàm dựng sẵn phổ biến để thực hiện các nhiệm vụ thường gặp trong lập trình. Dưới đây là một số hàm dựng sẵn quan trọng liên quan đến chuỗi, mảng và các hàm dựng sẵn khác:
Hàm Dựng Sẵn liên quan đến Chuỗi:
len(): Hàm này trả về độ dài của chuỗi, tức là số lượng ký tự trong chuỗi.
Ví dụ:
chuoi = "Hello, World!"
do_dai = len(chuoi)
print(do_dai) # Kết quả: 13
str(): Hàm này chuyển một đối tượng thành một chuỗi.
Ví dụ:
so_nguyen = 42
chuoi = str(so_nguyen)
print(chuoi) # Kết quả: "42"
split(): Hàm này chia một chuỗi thành một danh sách các chuỗi con dựa trên một ký tự phân tách.
Ví dụ:
chuoi = "apple,banana,cherry"
danh_sach = chuoi.split(",")
print(danh_sach) # Kết quả: ['apple', 'banana', 'cherry']
join(): Hàm này nối các chuỗi con trong một danh sách thành một chuỗi duy nhất, sử dụng một ký tự phân tách.
Ví dụ:
danh_sach = ['apple', 'banana', 'cherry']
chuoi = ",".join(danh_sach)
print(chuoi) # Kết quả: "apple,banana,cherry"
Hàm Dựng Sẵn liên quan đến Mảng:
len(): Đã được đề cập ở trên, hàm này trả về độ dài của mảng, tức là số lượng phần tử trong mảng.
min(): Hàm này trả về giá trị nhỏ nhất trong mảng.
Ví dụ:
mang = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
min_value = min(mang)
print(min_value) # Kết quả: 1
max(): Hàm này trả về giá trị lớn nhất trong mảng.
Ví dụ:
mang = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
max_value = max(mang)
print(max_value) # Kết quả: 9
map(): Hàm này áp dụng một hàm cho mỗi phần tử trong mảng và trả về một iterator chứa kết quả.
Ví dụ:
def double(x):
return x * 2
mang = [1, 2, 3, 4, 5]
ket_qua = map(double, mang)
ket_qua_list = list(ket_qua)
print(ket_qua_list) # Kết quả: [2, 4, 6, 8, 10]
filter(): Hàm này lọc các phần tử của mảng dựa trên một điều kiện đã cho và trả về một iterator chứa các phần tử thỏa điều kiện.
Ví dụ:
def is_even(x):
return x % 2 == 0
mang = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ket_qua = filter(is_even, mang)
ket_qua_list = list(ket_qua)
print(ket_qua_list) # Kết quả: [2, 4, 6, 8, 10]
Các Hàm Dựng Sẵn Khác:
abs(): Hàm này trả về giá trị tuyệt đối của một số.
Ví dụ:
so_am = -5
so_tuyet_doi = abs(so_am)
print(so_tuyet_doi) # Kết quả: 5
sum(): Hàm này tính tổng của các phần tử trong mảng hoặc iterable.
Ví dụ:
mang = [1, 2, 3, 4, 5]
tong = sum(mang)
print(tong) # Kết quả: 15
round(): Hàm này làm tròn một số thập phân đến một số lượng chữ số thập phân cụ thể.
Ví dụ:
so_thap_phan = 3.14159
so_lam_tron = round(so_thap_phan, 2)
print(so_lam_tron) # Kết quả: 3.14
Những hàm dựng sẵn này giúp bạn thực hiện nhiều tác vụ thông qua sử dụng sẵn mà không cần phải viết lại mã nguồn từ đầu, giúp tiết kiệm thời gian và tăng hiệu suất lập trình.
Hàm đệ quy là một khái niệm quan trọng trong lập trình Python và lập trình nói chung. Hàm đệ quy là một hàm mà trong quá trình thực thi, nó tự gọi chính nó với các tham số khác nhau để giải quyết một vấn đề cụ thể. Điều quan trọng trong hàm đệ quy là phải có một điều kiện để dừng lại, được gọi là "điều kiện suy biến", để tránh việc hàm thực hiện lặp vô hạn.
Khái Niệm về Hàm Đệ Quy:
Hàm đệ quy có thể được chia thành hai phần chính:
Trường hợp cơ bản (base case): Đây là trường hợp cơ bản mà hàm đệ quy sẽ xử lý trực tiếp mà không cần gọi lại chính nó. Trong trường hợp này, hàm thường trả về một giá trị cố định hoặc thực hiện một hành động cụ thể mà không gọi đệ quy.
Bước đệ quy (recursive step): Đây là phần của hàm đệ quy mà hàm gọi chính nó với các tham số khác nhau để tiếp tục giải quyết vấn đề. Trong quá trình này, các tham số thường thay đổi để tiến đến trường hợp cơ bản.
Lưu Ý về Điều Kiện Suy Biến:
Để hàm đệ quy không gọi lại chính nó một cách vô hạn, bạn phải xác định một điều kiện để hàm dừng lại, gọi là "điều kiện suy biến" (base case). Điều kiện suy biến là trường hợp mà hàm không gọi đệ quy nữa và trả về một giá trị cố định hoặc thực hiện một hành động cụ thể.
Ví dụ về hàm tính giai thừa bằng đệ quy:
def tinh_giai_thua(n):
# Điều kiện suy biến: nếu n là 0 hoặc 1, trả về 1
if n == 0 or n == 1:
return 1
else:
# Bước đệ quy: gọi lại hàm với n - 1 và nhân với n
return n * tinh_giai_thua(n - 1)
Trong ví dụ này, điều kiện suy biến là khi n bằng 0 hoặc 1, hàm trả về giá trị 1. Trong trường hợp khác, hàm gọi lại chính nó với n - 1 và nhân kết quả với n, tiếp tục thực hiện đệ quy cho đến khi đạt đến điều kiện suy biến.
Hàm đệ quy có thể giúp giải quyết các vấn đề phức tạp bằng cách chia nhỏ chúng thành các phần nhỏ hơn và giúp mã nguồn trở nên dễ đọc và hiểu hơn, nhưng cần phải chắc chắn rằng có điều kiện suy biến để tránh việc gọi đệ quy vô hạn.