Bài 2.1. Cấu trúc điều kiện trong Python (if/else)
Bài 2.1. Cấu trúc điều kiện trong Python (if/else)
Chào mừng các bạn đến với bài học tiếp theo trong hành trình chinh phục Python! Hôm nay, chúng ta sẽ cùng nhau khám phá một trong những khái niệm nền tảng và cực kỳ quan trọng trong bất kỳ ngôn ngữ lập trình nào: Cấu trúc điều kiện. Cụ thể hơn, chúng ta sẽ tìm hiểu về bộ ba quyền lực if, else, và elif trong Python.
Hãy tưởng tượng trong cuộc sống hàng ngày, chúng ta liên tục phải đưa ra quyết định dựa trên các điều kiện khác nhau: Nếu trời mưa, thì mang ô, ngược lại thì không cần. Nếu đói bụng, thì đi ăn. Lập trình cũng vậy! Máy tính cần biết cách "ra quyết định" dựa trên những điều kiện mà chúng ta đặt ra. Đó chính là lúc cấu trúc điều kiện if/else phát huy tác dụng.
1. Câu lệnh if - Nếu điều này đúng...
Câu lệnh if là dạng cơ bản nhất của cấu trúc điều kiện. Nó cho phép bạn thực thi một khối lệnh chỉ khi một điều kiện cụ thể là đúng (evaluate to True).
Cú pháp:
if <điều_kiện>:
# Khối lệnh sẽ được thực thi nếu điều_kiện là True
# Lưu ý: Khối lệnh này phải được thụt lề vào trong!
print("Điều kiện đúng!")
# ... các lệnh khác ...
<điều_kiện>: Đây là một biểu thức logic sẽ được Python đánh giá làTrue(đúng) hoặcFalse(sai). Ví dụ:x > 5,name == "Python",is_valid == True.- Dấu hai chấm (
:) ở cuối câu lệnhiflà bắt buộc. - Quan trọng: Khối lệnh bên trong
if(những dòng code sẽ chạy nếu điều kiện đúng) phải được thụt lề so với dòngif. Đây là cách Python xác định phạm vi của khối lệnh. Thường thì chúng ta thụt lề bằng 4 dấu cách.
Ví dụ:
Hãy xem một ví dụ đơn giản: kiểm tra xem một số có lớn hơn 10 không.
# Khai báo một biến số
so = 15
# Kiểm tra xem biến 'so' có lớn hơn 10 không
if so > 10:
print(f"Số {so} đúng là lớn hơn 10.")
print("Khối lệnh bên trong if đã được thực thi!")
print("Dòng này luôn được thực thi, bất kể điều kiện if.")
Giải thích:
- Chúng ta gán giá trị
15cho biếnso. - Câu lệnh
if so > 10:kiểm tra xem giá trị củaso(là 15) có lớn hơn 10 hay không. - Vì
15 > 10là đúng (True), nên khối lệnh được thụt lề bên dướiifsẽ được thực thi. Kết quả là hai dòngprintbên trongifđược hiển thị. - Dòng
printcuối cùng không được thụt lề, nó nằm ngoài khốiif, nên nó sẽ luôn luôn được thực thi sau khi khốiif(hoặc không) được kiểm tra xong.
Thử thay đổi giá trị so thành 5 và chạy lại xem sao nhé! Bạn sẽ thấy rằng các dòng print bên trong if sẽ không được thực thi nữa.
2. Câu lệnh else - Ngược lại thì...
Câu lệnh if rất hữu ích, nhưng thường thì chúng ta không chỉ muốn làm gì đó nếu điều kiện đúng, mà còn muốn làm một việc khác nếu điều kiện đó sai. Đó là lúc else xuất hiện.
else được sử dụng kết hợp với if. Khối lệnh bên trong else sẽ được thực thi chỉ khi điều kiện của if là False.
Cú pháp:
if <điều_kiện>:
# Khối lệnh thực thi nếu điều_kiện là True
print("Điều kiện đúng!")
else:
# Khối lệnh thực thi nếu điều_kiện là False
print("Điều kiện sai!")
elsephải đi liền sau khối lệnh củaif(hoặcelif, chúng ta sẽ nói đến sau).elsekhông có điều kiện riêng của nó; nó đơn giản là trường hợp "còn lại".- Giống như
if, khối lệnh củaelsecũng phải được thụt lề.
Ví dụ:
Mở rộng ví dụ trước: kiểm tra xem một số là dương hay không dương (tức là bằng 0 hoặc âm).
# Khai báo một biến số
so = -5
# Kiểm tra xem số có dương không
if so > 0:
print(f"Số {so} là số dương.")
else:
# Nếu điều kiện so > 0 là False, khối lệnh này sẽ chạy
print(f"Số {so} không phải là số dương (có thể là 0 hoặc âm).")
print("Kiểm tra hoàn tất.")
Giải thích:
sođược gán giá trị-5.if so > 0:kiểm tra-5 > 0. Điều này là sai (False).- Vì điều kiện
iflàFalse, Python sẽ bỏ qua khối lệnh củaifvà nhảy tới khối lệnh củaelse. - Khối lệnh bên trong
elseđược thực thi, in ra: "Số -5 không phải là số dương..." - Dòng
printcuối cùng (ngoài cấu trúcif/else) được thực thi.
Hãy thử với so = 20 và so = 0 để xem kết quả thay đổi thế nào.
3. Câu lệnh elif - Nếu không phải cái này, thì thử cái kia...
Đôi khi, chúng ta có nhiều hơn hai khả năng cần kiểm tra. Ví dụ: kiểm tra xem một số là dương, âm, hay bằng không. Chỉ dùng if và else thì chưa đủ linh hoạt. Đây là lúc elif (viết tắt của "else if") tỏa sáng.
elif cho phép bạn kiểm tra một điều kiện mới nếu điều kiện if trước đó là False. Bạn có thể có nhiều elif liên tiếp.
Cú pháp:
if <điều_kiện_1>:
# Thực thi nếu điều_kiện_1 là True
print("Điều kiện 1 đúng.")
elif <điều_kiện_2>:
# Thực thi nếu điều_kiện_1 là False VÀ điều_kiện_2 là True
print("Điều kiện 1 sai, nhưng điều kiện 2 đúng.")
elif <điều_kiện_3>:
# Thực thi nếu điều_kiện_1 và 2 đều False VÀ điều_kiện_3 là True
print("Điều kiện 1, 2 sai, nhưng điều kiện 3 đúng.")
# ... có thể có nhiều elif khác ...
else:
# Thực thi nếu TẤT CẢ các điều kiện if/elif ở trên đều là False
print("Tất cả các điều kiện trên đều sai.")
Điểm quan trọng:
- Python sẽ kiểm tra các điều kiện từ trên xuống dưới (
if->elif->elif-> ...). - Ngay khi gặp một điều kiện đúng (
True), khối lệnh tương ứng sẽ được thực thi, và toàn bộ phần còn lại của cấu trúcif/elif/elsesẽ bị bỏ qua. - Khối
elsecuối cùng (nếu có) là tùy chọn. Nó sẽ chỉ chạy nếu tất cả các điều kiệnifvàeliftrước đó đều làFalse.
Ví dụ: Phân loại số (dương, âm, hoặc bằng không).
# Nhập số từ người dùng
try:
# Chuyển đổi input thành số nguyên
so = int(input("Nhập một số nguyên: "))
# Bắt đầu kiểm tra
if so > 0:
print(f"Số {so} là số dương.")
elif so < 0:
print(f"Số {so} là số âm.")
else: # Trường hợp duy nhất còn lại là so == 0
print(f"Số bạn nhập là số 0.")
except ValueError:
print("Đầu vào không hợp lệ. Vui lòng nhập một số nguyên.")
Giải thích:
- Chương trình yêu cầu người dùng nhập một số và cố gắng chuyển đổi nó thành số nguyên (
int). Chúng ta dùngtry-exceptđể xử lý trường hợp người dùng nhập không phải số. - Kiểm tra 1 (
if so > 0): Nếu số nhập vào lớn hơn 0 (ví dụ: người dùng nhập10), dòngprintđầu tiên sẽ chạy, và phầnelifvàelsesẽ bị bỏ qua. - Kiểm tra 2 (
elif so < 0): Nếu điều kiệnifở trên làFalse(ví dụ: người dùng nhập-5), Python sẽ kiểm tra điều kiện này. Vì-5 < 0làTrue, dòngprintthứ hai sẽ chạy, và phầnelsesẽ bị bỏ qua. - Trường hợp còn lại (
else): Nếu cả hai điều kiệnifvàelifđềuFalse(điều này chỉ xảy ra khisokhông lớn hơn 0 và cũng không nhỏ hơn 0, tức làso == 0), thì khối lệnh trongelsesẽ được thực thi.
Đây là một cấu trúc cực kỳ phổ biến để xử lý các trường hợp loại trừ lẫn nhau.
4. Cấu trúc if lồng nhau (Nested if)
Bạn hoàn toàn có thể đặt một cấu trúc if/elif/else bên trong một khối lệnh của một cấu trúc if/elif/else khác. Đây được gọi là lồng nhau (nesting).
Ví dụ: Kiểm tra xem một người có đủ tuổi lái xe và có bằng lái hay không.
tuoi = 20
co_bang_lai = True # Giả sử người này có bằng lái
print(f"Kiểm tra người {tuoi} tuổi:")
if tuoi >= 18:
print("Đủ tuổi lái xe.")
# Kiểm tra tiếp bên trong nếu đủ tuổi
if co_bang_lai:
print("Và đã có bằng lái. Được phép lái xe!")
else:
print("Nhưng chưa có bằng lái. Không được phép lái xe.")
else:
print("Chưa đủ tuổi lái xe.")
Giải thích:
- Câu lệnh
ifbên ngoài (if tuoi >= 18:) kiểm tra tuổi. - Nếu
tuoi >= 18làTrue, chương trình sẽ đi vào khối lệnh của nó. - Bên trong khối lệnh này, lại có một cấu trúc
if/elsekhác (if co_bang_lai:). Cấu trúc này chỉ được kiểm tra sau khi đã xác định là đủ tuổi. - Nếu
co_bang_lailàTrue, thông báo "Và đã có bằng lái..." được in. Ngược lại, thông báo "Nhưng chưa có bằng lái..." được in. - Nếu ngay từ đầu
tuoi >= 18làFalse, khối lệnh củaelsebên ngoài sẽ được thực thi, và cấu trúcif/elselồng bên trong sẽ không bao giờ được chạy tới.
Lưu ý: Việc lồng các cấu trúc if quá sâu có thể làm code trở nên khó đọc và khó bảo trì. Hãy cân nhắc sử dụng elif hoặc viết các hàm riêng biệt để giữ cho code rõ ràng hơn nếu logic trở nên quá phức tạp.
5. Toán tử logic (and, or, not) trong điều kiện
Thường thì các điều kiện của bạn sẽ phức tạp hơn là chỉ so sánh hai giá trị. Bạn có thể kết hợp nhiều biểu thức logic lại với nhau bằng các toán tử:
and: Trả vềTruechỉ khi cả hai vế đềuTrue.or: Trả vềTruenếu ít nhất một trong hai vế làTrue.not: Đảo ngược giá trị logic (TruethànhFalse,FalsethànhTrue).
Ví dụ: Kiểm tra xem một số có nằm trong khoảng từ 10 đến 20 (bao gồm cả 10 và 20) hay không.
so = 15
# Kiểm tra xem so >= 10 VÀ so <= 20
if so >= 10 and so <= 20:
print(f"Số {so} nằm trong khoảng [10, 20].")
else:
print(f"Số {so} nằm ngoài khoảng [10, 20].")
# Ví dụ với 'or': Kiểm tra xem người dùng có phải admin HOẶC có quyền truy cập đặc biệt
username = "user123"
is_admin = False
has_special_access = True
if is_admin or has_special_access:
print(f"Người dùng {username} có quyền truy cập.")
else:
print(f"Người dùng {username} không có quyền truy cập.")
# Ví dụ với 'not': Kiểm tra nếu một danh sách KHÔNG rỗng
my_list = [1, 2, 3]
if not len(my_list) == 0: # Tương đương if len(my_list) != 0: hoặc đơn giản là if my_list:
print("Danh sách không rỗng.")
else:
print("Danh sách rỗng.")
Giải thích:
- Ví dụ đầu tiên dùng
andđể đảm bảo sốsothỏa mãn cả hai điều kiện: lớn hơn hoặc bằng 10 và nhỏ hơn hoặc bằng 20. - Ví dụ thứ hai dùng
or. Chỉ cần một trong hai điều kiệnis_adminhoặchas_special_accesslàTrue, thì người dùng sẽ có quyền truy cập. - Ví dụ thứ ba dùng
notđể đảo ngược kết quả củalen(my_list) == 0. Nếu danh sách không rỗng (len(my_list) == 0làFalse), thìnot Falsesẽ làTrue, và thông báo "Danh sách không rỗng" được in. Lưu ý: Trong Python, các đối tượng collection rỗng (list, tuple, dict, set, string rỗng) được coi làFalsetrong ngữ cảnh boolean, nên cách viếtif my_list:thường gọn hơn.
Cấu trúc điều kiện if/elif/else là một công cụ vô cùng mạnh mẽ giúp bạn điều khiển luồng thực thi của chương trình, làm cho code của bạn trở nên thông minh và linh hoạt hơn rất nhiều. Hãy thực hành thật nhiều với các ví dụ khác nhau để nắm vững cách sử dụng chúng nhé!
Comments