DHDataHọc
TheoryLesson 9/305 min read+10 XP

if, elif, else

Bạn sẽ học được

  • Cấu trúc if / elif / else và thứ tự đánh giá.
  • Toán tử so sánh, nối chuỗi so sánh, and / or / not.
  • Vì sao thứ tự các nhánh quyết định kết quả.
  • Toán tử ba ngôi và biểu thức điều kiện.
  • Các lỗi logic thường gặp khi phân loại dữ liệu.

Khái niệm cốt lõi

Câu lệnh điều kiện chọn nhánh dựa trên giá trị đúng/sai:

code
score = 85
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 50:
    grade = "D"
else:
    grade = "F"
print(grade)
code
B

Cách hoạt động: Python kiểm tra từ trên xuống, dừng ở nhánh đầu tiên đúng. 85 >= 90 sai; 85 >= 80 đúng → gán "B" và bỏ qua mọi nhánh còn lại. else chạy khi không nhánh nào đúng và là tuỳ chọn.

Thụt lề xác định thân nhánh. Có thể dùng một dòng khi thân chỉ có một lệnh:

code
if score >= 50: print("Đạt")

Nhưng với nhánh nhiều lệnh hoặc cần debug, viết đầy đủ dễ đọc hơn.

Toán tử so sánh

Toán tửNghĩa
==Bằng
!=Khác
<, <=, >, >=Nhỏ hơn, nhỏ hơn hoặc bằng, lớn hơn, lớn hơn hoặc bằng

Python cho phép nối chuỗi so sánh, đọc như toán học:

code
age = 25
print(18 <= age < 65)
code
True

Tương đương 18 <= age and age < 65 nhưng chỉ đánh giá age một lần. Với biểu thức có hàm, điều này tránh gọi hàm hai lần.

So sánh chuỗi theo thứ tự từ điển Unicode:

code
print("An" < "Bình")
print("a" < "A")
code
True
False

Chữ thường đứng sau chữ hoa trong bảng mã, nên "a" < "A" là False. Đừng dựa vào so sánh chuỗi để sắp xếp tên người theo alphabet tiếng Việt — cần chuẩn hoá và có thể cần thư viện locale/collate.

Kết hợp điều kiện

code
age = 25
income = 15_000_000
has_job = True

if age >= 18 and income >= 10_000_000:
    print("Đủ điều kiện mở thẻ")

if not has_job or age < 18:
    print("Cần bổ sung hồ sơ")
else:
    print("Hồ sơ hợp lệ")

and đúng khi cả hai đúng; or đúng khi một trong hai đúng; not đảo giá trị. Thứ tự ưu tiên: not > and > or. Khi trộn, dùng ngoặc để người đọc không phải nhớ:

code
if (age >= 18 and has_job) or income >= 30_000_000:
    ...

Hai cách viết sau không tương đương:

code
if age >= 18 and age <= 65: ...   # cả hai
if 18 <= age <= 65: ...           # cách viết gọn, cùng nghĩa
if age >= 18 or age <= 65: ...    # gần như luôn đúng — lỗi logic

Nhánh thứ ba là lỗi kinh điển: mọi tuổi đều thoả một trong hai vế, nên điều kiện luôn đúng.

and / or trả về giá trị, không chỉ True/False

Đây là chi tiết quan trọng của Python:

code
print(0 and "x")
print("" or "mặc định")
print("An" and "Bình")
code
0
mặc định
Bình

and trả toán hạng đầu tiên nếu nó "sai", ngược lại trả toán hạng cuối. or trả toán hạng đầu tiên nếu nó "đúng", ngược lại trả toán hạng cuối. Nhờ vậy có thể viết giá trị mặc định:

code
name = user_input or "Khách"

Nhưng cẩn thận: nếu user_input là 0 hoặc "" — giá trị hợp lệ trong nhiều ngữ cảnh — biểu thức sẽ thay bằng mặc định. Chương truthiness sẽ phân tích kỹ.

Lồng nhánh và thoát sớm

Có thể lồng if trong if, nhưng lồng sâu khó đọc:

code
def xep_loai(score, attendance):
    if score >= 50:
        if attendance >= 0.8:
            return "Đạt"
        else:
            return "Thiếu chuyên cần"
    else:
        return "Không đạt"

Cách viết thoát sớm phẳng hơn và dễ kiểm thử:

code
def xep_loai(score, attendance):
    if score < 50:
        return "Không đạt"
    if attendance < 0.8:
        return "Thiếu chuyên cần"
    return "Đạt"

Mỗi điều kiện loại một trường hợp và thoát; phần còn lại là trường hợp bình thường. Quy tắc thực dụng: nếu thân else cũng dài, hãy đảo điều kiện và thoát sớm.

Toán tử ba ngôi

Khi chỉ cần chọn một trong hai giá trị:

code
status = "Đạt" if score >= 50 else "Không đạt"
print(status)

Cú pháp: A if dieu_kien else B. Đọc là "A nếu điều kiện, ngược lại B". Chỉ dùng khi ngắn; lồng ba ngôi vào nhau làm code khó đọc và dễ sai thứ tự.

Thực hành

  1. Viết bảng xếp loại A/B/C/D/F theo điểm, thử với 95, 85, 72, 50, 49.
  2. Kiểm tra 18 <= age < 65 với ba giá trị.
  3. Viết điều kiện mở thẻ: tuổi từ 18, thu nhập từ 10 triệu, có việc làm.
  4. Cố ý dùng age >= 18 or age <= 65 và giải thích vì sao luôn đúng.
  5. Viết lại hàm lồng nhánh thành thoát sớm.
  6. Dùng toán tử ba ngôi để gán status.

Lỗi thường gặp

Triệu chứngNguyên nhânCách sửa
SyntaxError ở if x = 5Nhầm gán với so sánhDùng ==
Nhánh không bao giờ chạyNhánh trước quá rộngSắp từ hẹp đến rộng
Điều kiện luôn đúngDùng or thay andKiểm tra logic từng vế
0.1 + 0.2 == 0.3 saiSai số nhị phânSo sánh với dung sai
and trả 0 thay vì Falseand/or trả toán hạngBọc bool() nếu cần đúng/sai
else chạy ngoài ý muốnThụt lề saiKiểm tra khối lệnh
Code lồng quá sâuNhiều if lồng nhauThoát sớm

Tóm tắt

  • if/elif/else dừng ở nhánh đúng đầu tiên; thứ tự nhánh là một phần logic.
  • Nối so sánh 18 <= age < 65 gọn và chỉ đánh giá một lần.
  • and/or trả về toán hạng, không chỉ True/False.
  • Thoát sớm giảm lồng nhánh và dễ kiểm thử.
  • A if dieu_kien else B cho chọn giá trị ngắn gọn.

Use ← → to move between lessons