Học bằng cách đọc theo thứ tự

if / elif / else và rẽ nhánh nâng cao

Học câu lệnh điều kiện trong Python: phân nhánh nhiều với if / elif / else, toán tử ba ngôi và các mẫu kiểm tra nâng cao.

Những điều cơ bản về if và if not

if điều_kiện: chạy khối chỉ khi điều kiện là True — đây là cấu trúc rẽ nhánh cơ bản nhất. Để phủ định một điều kiện, hãy thêm not ở phía trước, như if not điều_kiện:.

nottoán tử đảo True và False, nên các diễn đạt như "khi không phải..." hay "khi không rỗng" có thể viết một cách tự nhiên.

# if: chỉ chạy khi điều kiện là True
is_logged_in = True
if is_logged_in:
    print("Xin chào")
# Đầu ra: Xin chào

# if not: đảo điều kiện trước khi đánh giá
is_logged_in = False
if not is_logged_in:
    print("Vui lòng đăng nhập")
# Đầu ra: Vui lòng đăng nhập

# Kết hợp với biểu thức so sánh
cart = []
if not cart:
    print("Giỏ hàng của bạn đang trống")
# Đầu ra: Giỏ hàng của bạn đang trống

Kiểm tra xem người dùng đã xác minh email hay chưa.

① Định nghĩa email_verified = False.

② Dùng if email_verified: để in "Cảm ơn bạn đã sử dụng dịch vụ" khi đã xác minh.

③ Dùng if not email_verified: để in "Vui lòng hoàn tất xác minh email" khi chưa xác minh.

(Phần giải thích sẽ hiện ra khi bạn chạy code đúng)

Python Editor

Chạy code để xem đầu ra

Viết rẽ nhánh nhiều nhánh với elif và else

Để xử lý nhiều nhánh, hãy dùng elifelse.

elif là viết tắt của else if — khi điều kiện if là False, Python sẽ thử điều kiện kế tiếp, và nếu không có cái nào khớp, else cuối cùng sẽ chạy.

Cách if / elif / else được đánh giá
Bắt đầuif đk1khối 1elif đk2khối 2elsekhối 3TrueFalseTrueFalsecòn lại

Các điều kiện được đánh giá từ trên xuống dưới. Chỉ điều kiện đầu tiên trở thành True được chạy, phần còn lại bị bỏ qua. Nếu không có cái nào True, else chạy.

# Chọn chỉ dẫn dựa trên màu đèn tín hiệu
signal = "YELLOW"

if signal == "GREEN":
    print("Đi tiếp")
elif signal == "YELLOW":
    print("Đi chậm và cẩn thận")
elif signal == "RED":
    print("Dừng lại")
else:
    print("Tín hiệu không xác định")
# Đầu ra: Đi chậm và cẩn thận

Đổi thông báo trên màn hình dựa trên role của người dùng.

① Gán role = "member".

② In "Bạn có thể truy cập trang quản trị" khi role == "admin", "Bạn có thể truy cập dashboard" khi role == "member", "Vui lòng đăng nhập" khi role == "guest", còn lại in "Quyền không xác định".

Python Editor

Chạy code để xem đầu ra

elif được đánh giá từ trên xuống

Nếu bạn viết if age >= 0: ... elif age >= 20: ..., điều kiện rộng hơn đứng trước nên cái sau không bao giờ khớp. Khi rẽ nhánh nhiều nhánh, hãy liệt kê các điều kiện hẹp (chặt chẽ) hơn trước.

Dùng chính giá trị làm điều kiện (truthiness)

Điều kiện của if không bị giới hạn ở các biểu thức so sánh như == — bạn có thể đặt chính giá trị vào đó. Python sẽ chuyển nó thành bool ở phía sau hậu trường, xem "rỗng" hay 0 là False và mọi thứ khác là True.

Truthiness của giá trị
0 / "" /[] / {} / Nonechuyển boolFalsecó nội dungchuyển boolTrue
KiểuĐược xem là FalseĐược xem là True (ví dụ)
int / float0, 0.01, -1, 3.14
str"" (chuỗi rỗng)"a", "0" (mọi chuỗi không rỗng đều là True)
list / tuple / set[], (), set() (collection rỗng)[1], (0,), {0}
dict{} (dict rỗng){"key": "value"}
NoneNone(mọi giá trị khác None)

Đặc điểm này cho phép bạn viết các kiểm tra như "đầu vào có rỗng không?" hay "giỏ hàng có gì không?" một cách rất gọn.

Thay vì if len(cart) > 0:, chỉ cần viết if cart: — ý nghĩa giống nhau. Đây là cách viết rất Pythonic.

# Không thực hiện tìm kiếm khi từ khóa rỗng
search_query = ""
if search_query:
    print(f"Đang tìm: {search_query}")
else:
    print("Vui lòng nhập từ khóa")
# Đầu ra: Vui lòng nhập từ khóa

# Chuyển sang thanh toán khi giỏ hàng có ít nhất một món
cart = ["apple", "bread"]
if cart:
    print(f"Tiến hành với {len(cart)} món")
# Đầu ra: Tiến hành với 2 món

Kiểm tra xem địa chỉ giao hàng đã được đăng ký chưa.

① Đặt shipping_address = "" (chuỗi rỗng).

② Dùng if shipping_address: — in "Sẵn sàng giao hàng" khi có địa chỉ, ngược lại in "Vui lòng đăng ký địa chỉ".

③ Gán lại shipping_address thành chuỗi như "123 Lê Lợi, Quận 1, TP.HCM" rồi chạy lại cùng if để xác nhận kết quả thay đổi.

Python Editor

Chạy code để xem đầu ra

Viết if một dòng với toán tử ba ngôi

Khi tất cả những gì bạn cần là gán một trong hai giá trị dựa trên điều kiện, bạn không cần 4 dòng if / else — bạn có thể làm trong một dòng. Đây gọi là toán tử ba ngôi (hay biểu thức điều kiện). Cú pháp là giá_trị_nếu_true if điều_kiện else giá_trị_nếu_false.

Cách đọc toán tử ba ngôi
giá trị 1ifđiều kiệnelsegiá trị 2
# 4 dòng với if / else thông thường
age = 25
if age >= 20:
    status = "người lớn"
else:
    status = "vị thành niên"

# Một dòng với toán tử ba ngôi
status = "người lớn" if age >= 20 else "vị thành niên"
print(status)   # người lớn

Bí quyết là chỉ dùng nó cho lựa chọn hai nhánh đơn giản. Khi điều kiện hoặc giá trị dài ra, hoặc bạn có ba nhánh trở lên, dùng if / elif / else thông thường sẽ dễ đọc hơn.

Đổi nhãn giao hàng dựa trên tổng đơn hàng.

① Định nghĩa total_price = 3200.

② Dùng toán tử ba ngôi, gán "Miễn phí giao hàng" cho shipping_label khi total_price >= 5000, ngược lại gán "Phí giao hàng 5$".

③ In shipping_label.

Python Editor

Chạy code để xem đầu ra

Kiểm tra khoảng có thể nối trực tiếp

Kiểm tra khoảng như "từ 0 đến 100" có thể viết bằng cách nối các toán tử so sánh thay vì dùng and. Kết quả đọc lên giống y một bất đẳng thức toán học, làm ý đồ rất rõ ràng.

score = 78

# Dùng and
if score >= 0 and score <= 100:
    print("Điểm hợp lệ")

# Dạng nối (cùng ý nghĩa)
if 0 <= score <= 100:
    print("Điểm hợp lệ")

Quyết định xem điểm bài kiểm tra có trong khoảng hợp lệ (0–100) hay không.

① Định nghĩa score = 78.

② Dùng so sánh nối 0 <= score <= 100, in "Điểm hợp lệ" khi trong khoảng, ngược lại in "Ngoài khoảng".

③ Gán lại score = 120 rồi chạy lại cùng kiểm tra.

Python Editor

Chạy code để xem đầu ra

Kiểm tra kiểu và giá trị (isinstance và is None)

Khi bạn muốn kiểm tra kiểu của giá trị mà một biến đang giữ, hãy dùng isinstance(giá_trị, kiểu). Truyền giá trị trước và kiểu sau — nếu giá trị là một instance của kiểu đó, hàm trả về True.

price = 980
user_name = "minh"

print(isinstance(price, int))      # True
print(isinstance(user_name, str))  # True
print(isinstance(price, str))      # False

# Kết hợp với if để chỉ tính khi là số
if isinstance(price, int) and price > 0:
    tax_included = int(price * 1.1)
    print(tax_included)   # 1078

None là gì?

Nonegiá trị đặc biệt của Python mang nghĩa "không có giá trị". Nó đại diện cho những thứ như "kết quả chưa được lấy về", "trạng thái chưa khởi tạo", hay "thứ hàm trả về khi nó không trả về gì cả". Đây là giá trị duy nhất mang nghĩa "không có gì", khác với 0 hay chuỗi rỗng.

None khác các giá trị khác như thế nào
0(số)""(chuỗi rỗng)[](list rỗng)None(không có)
# Một hàm không trả về gì sẽ ngầm trả về None
def greet():
    print("hello")

result = greet()      # "hello" được in ra
print(result)         # None

# Một giá trị khởi tạo mang nghĩa "chưa quyết định"
selected_user = None
print(selected_user)  # None

Để kiểm tra một giá trị có phải là None hay không, cách Pythonic là dùng is None thay vì ==. Vì None là một object duy nhất trong chương trình, so sánh xem hai tham chiếu có trỏ tới cùng một object trong bộ nhớ hay không bằng is làm cho ý đồ rõ ràng hơn.

# Thông tin user từ API (giả sử chưa được lấy về)
user = None

if user is None:
    print("Thông tin user chưa được tải")
else:
    print(f"Xin chào, {user}")
# Đầu ra: Thông tin user chưa được tải

# Để kiểm tra "không phải None", dùng `is not None`
score = 0
if score is not None:
    print(f"Điểm: {score}")   # Điểm: 0

0 và None là hai thứ khác nhau

Viết if score: sẽ xem score == 0 cũng là False. Khi bạn cần phân biệt "chưa nhập (None)" với "0 điểm", hãy kiểm tra rõ ràng bằng if score is None: hoặc if score is not None:.

Kiểm tra sự tồn tại và kiểu của tuổi user lấy từ API.

① Định nghĩa user_age = None.

② Nếu user_age is None, in "Tuổi chưa đăng ký"; ngược lại, nếu isinstance(user_age, int) là True, in giá trị của user_age.

③ Gán lại user_age = 29 rồi chạy lại cùng kiểm tra.

Python Editor

Chạy code để xem đầu ra

Kiểm tra nội dung collection với in / not in

Để kiểm tra một giá trị có nằm trong list hay không, dùng giá_trị in collection. Ngược lại — "không nằm trong" — là giá_trị not in collection. Nó hoạt động với list, tuple, set, và chuỗi, và với dict thì kiểm tra các key.

allowed_roles = ["admin", "editor", "member"]
current_role = "member"

if current_role in allowed_roles:
    print("Cho phép truy cập")
else:
    print("Từ chối truy cập")
# Đầu ra: Cho phép truy cập

# Kiểm tra một chuỗi con có xuất hiện trong chuỗi hay không
if "error" in "connection error: timeout":
    print("Phát hiện dòng có lỗi")

# Với dict, `in` kiểm tra các key
user = {"name": "minh", "role": "admin"}
if "email" not in user:
    print("Email chưa đăng ký")

Kiểm tra trạng thái xuất bản của một bài blog.

① Định nghĩa published_slugs = ["python-intro", "sql-basics", "git-tips"].

② Định nghĩa target = "git-tips".

③ Nếu target nằm trong published_slugs, in "Đã xuất bản"; ngược lại in "Bản nháp".

④ Đổi target thành "draft-post" rồi chạy lại cùng kiểm tra.

Python Editor

Chạy code để xem đầu ra

Trong bài này, chúng ta đã học rẽ nhánh nâng cao với cơ bản của if / if not, logic nhiều nhánh với elif / else, truthiness xem giá trị rỗng và 0 là False, toán tử ba ngôi giá_trị_1 if điều_kiện else giá_trị_2, kiểm tra kiểu và giá trị với isinstanceis None, và kiểm tra collection với in / not in.

Trong bài tiếp theo, chúng ta sẽ học all() / any(), cho phép bạn kiểm tra liệu mọi phần tử trong list có thỏa điều kiện hay không trong một lệnh gọi duy nhất.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Trong các đáp án sau, đáp án nào chạy khối của if not value:?

Câu 2Đoạn code này in gì?
age = 18
status = "người lớn" if age >= 20 else "vị thành niên"
print(status)

Câu 3Trong các đáp án sau, đáp án nào là cách được khuyến nghị nhất để kiểm tra một giá trị có phải None hay không?