Bài 19: Câu lệnh rẽ nhánh if – Lý thuyết | Tin 10

Sơ đồ khối câu lệnh if dạng thiếu

I. Lý thuyết trọng tâm

1. Biểu thức logic

a) Khái niệm

Trong lập trình, nhiều tình huống phụ thuộc vào một điều kiện nào đó đúng hay sai. Biểu thức logic là biểu thức chỉ nhận một trong hai giá trị: True (đúng) hoặc False (sai), thuộc kiểu dữ liệu bool.

Dạng đơn giản nhất của biểu thức logic là các phép so sánh giữa hai giá trị (số hoặc xâu kí tự).

Câu hỏi kiểm tra nhanh (SGK): Biểu thức nào sau đây có thể đưa vào vị trí <điều kiện> trong lệnh Nếu <điều kiện> thì <lệnh>?

Phương án Biểu thức Là biểu thức logic? Giải thích
A m, n = 1, 2 Đây là lệnh gán, không trả về True/False
B a + b > 1 ✔️ Phép so sánh → cho True hoặc False
C a * b < a + b ✔️ Phép so sánh → cho True hoặc False
D 12 + 15 > 2 * 13 ✔️ Phép so sánh → cho True hoặc False

b) Sáu phép so sánh trong Python

Phép so sánh Ý nghĩa Ví dụ Kết quả
< Nhỏ hơn 3 < 5 True
> Lớn hơn 10 > 10 False
<= Nhỏ hơn hoặc bằng 5 <= 5 True
>= Lớn hơn hoặc bằng 3 >= 7 False
== Bằng nhau 4 == 4 True
!= Khác nhau 3 != 5 True

Lưu ý quan trọng: Phép == (kiểm tra bằng) dùng hai dấu bằng, khác với = (lệnh gán) chỉ dùng một dấu bằng. Python cũng phân biệt hoa/thường khi so sánh xâu: "Number" == "number"False.

c) Ba phép toán logic: and, or, not

Nhiều biểu thức logic đơn có thể kết hợp lại bằng ba phép toán logic:

Phép and (và): Kết quả True chỉ khi cả hai vế đều đúng.

X Y X and Y
True True True
True False False
False True False
False False False

Phép or (hoặc): Kết quả True khi ít nhất một vế đúng.

X Y X or Y
True True True
True False True
False True True
False False False

Phép not (phủ định): Đảo ngược giá trị.

X not X
True False
False True

Ví dụ phân tích chi tiết (SGK):

>>> x, y, z = 10, 5, 9
>>> b = x < 11 and z > 5
>>> c = x > 15 or y < 9
>>> a = not b
Biến Phân tích Kết quả
b x < 1110 < 11True; z > 59 > 5True. True and TrueTrue True
c x > 1510 > 15False; y < 95 < 9True. False or TrueTrue True
a not bnot TrueFalse False

Câu hỏi kiểm tra nhanh (SGK): Mỗi biểu thức sau có giá trị True hay False?

Biểu thức Tính toán Kết quả
a) 100%4 == 0 $100 \% 4 = 0$; $0 == 0$ → đúng True
b) 111//5 != 20 or 20%3 != 0 $111 // 5 = 22$; $22 \neq 20$ → True. Phép or có vế trái True → kết quả True ngay True

2. Câu lệnh rẽ nhánh if

Trong thực tế, nhiều công việc chỉ thực hiện khi điều kiện nhất định được thỏa mãn. Python dùng câu lệnh if để mô tả tình huống rẽ nhánh này.

a) Dạng thiếu (chỉ có if, không có else)

if <điều kiện>:
    <khối lệnh>

Cách hoạt động: Python kiểm tra <điều kiện>. Nếu đúng (True) → thực hiện <khối lệnh>. Nếu sai (False) → bỏ qua <khối lệnh>, chuyển sang lệnh tiếp theo.

Sơ đồ khối câu lệnh if dạng thiếu
Sơ đồ khối câu lệnh if dạng thiếu

b) Dạng đủ (if...else)

if <điều kiện>:
    <khối lệnh 1>
else:
    <khối lệnh 2>

Cách hoạt động: Python kiểm tra <điều kiện>. Nếu đúng → thực hiện <khối lệnh 1>. Nếu sai → thực hiện <khối lệnh 2>.

Ví dụ in giá trị tuyệt đối của hiệu hai số a, b:

if a > b:
    print(a - b)
else:
    print(b - a)
Sơ đồ khối câu lệnh if...else dạng đủ
Sơ đồ khối câu lệnh if…else dạng đủ

c) Quy tắc cú pháp bắt buộc

Quy tắc Chi tiết
Dấu hai chấm : Bắt buộc sau <điều kiện> và sau else
Thụt lề (indent) Khối lệnh bên trong phải viết lùi vào (mặc định 1 Tab hoặc 4 dấu cách) và thẳng hàng
ifelse thẳng lề trái Hai từ khóa này phải nằm cùng cột

Đặc trưng Python: Thay vì dùng dấu ngoặc nhọn {} như nhiều ngôn ngữ khác, Python dùng thụt lề để xác định khối lệnh. Sai thụt lề → lỗi IndentationError.

d) if lồng nhau

Khi bài toán có 3 trường hợp trở lên, ta đặt thêm if bên trong else:

if <điều kiện 1>:
    <khối lệnh 1>
else:
    if <điều kiện 2>:
        <khối lệnh 2>
    else:
        <khối lệnh 3>

Câu hỏi kiểm tra nhanh (SGK): Đoạn chương trình sau thực hiện công việc gì?

k = int(input("Nhập một số nguyên dương: "))
if k <= 0:
    print("Bạn nhập sai rồi!")

→ Chương trình nhập một số nguyên. Sau đó kiểm tra: nếu số vừa nhập ≤ 0 (tức không phải số nguyên dương) thì in thông báo "Bạn nhập sai rồi!". Nếu nhập đúng số dương thì không thông báo gì (dạng thiếu — không có else).

II. Phương pháp giải các dạng bài tập

Dạng 1: Tính giá trị biểu thức logic

Phương pháp:

  • Bước 1: Tính phép toán số học trước (nếu có): %, //, **, *, /, +, -.
  • Bước 2: Thực hiện phép so sánh → được True hoặc False.
  • Bước 3: Áp dụng phép toán logic theo thứ tự ưu tiên: not (cao nhất) → andor (thấp nhất).

Thứ tự ưu tiên tổng hợp: Số học → So sánh → notandor

Bài tập mẫu (SGK – Ví dụ): Cho x, y, z = 10, 5, 9. Tính: c = x > 15 or y < 9

Bước Tính toán Kết quả
Vế trái x > 1510 > 15 False
Vế phải y < 95 < 9 True
Kết hợp or False or True True

c = True

Dạng 2: Viết biểu thức logic từ điều kiện cho trước

Phương pháp:

  • Xác định biến cần kiểm tra.
  • Dịch điều kiện toán học sang Python, dùng and/or để kết hợp nhiều phép so sánh.
Điều kiện toán học Biểu thức Python
$a < x < b$ (khoảng mở) x > a and x < b
$a \le x \le b$ (đoạn đóng) x >= a and x <= b
x nằm ngoài đoạn $[a; b]$ x < a or x > b
x thuộc $[a; b]$ hoặc $[c; d]$ (x >= a and x <= b) or (x >= c and x <= d)
x chia hết cho n x % n == 0

Bài tập mẫu (SGK – Luyện tập, bài 1): Viết biểu thức logic ứng với mỗi câu:

a) Số x nằm trong khoảng (0; 10):

x > 0 and x < 10

b) Số y nằm ngoài đoạn [1; 2]:

y < 1 or y > 2

c) Số z nằm trong đoạn [0; 1] hoặc [5; 10]:

(z >= 0 and z <= 1) or (z >= 5 and z <= 10)

Dạng 3: Tìm giá trị thỏa mãn biểu thức logic

Phương pháp:

  • Phân tích từng vế của biểu thức logic.
  • Tìm giá trị biến sao cho mỗi vế cho kết quả phù hợp (True/False) theo phép and/or.
  • Với and: cả hai vế phải đúng.
  • Với or: ít nhất một vế phải đúng.

Bài tập mẫu (SGK – Luyện tập, bài 2): Tìm một vài giá trị m, n thỏa mãn:

a) 100%m == 0 and n%5 != 0

  • Vế trái: 100 % m == 0 → m phải là ước của 100. Các ước: 1, 2, 4, 5, 10, 20, 25, 50, 100.
  • Vế phải: n % 5 != 0 → n không chia hết cho 5. Ví dụ: 1, 2, 3, 4, 6, 7…
  • Phép and → cả hai vế cùng đúng.

→ Ví dụ: m = 10, n = 3 (vì $100 \% 10 = 0$ ✔️ và $3 \% 5 = 3 \neq 0$ ✔️).

b) m%100 == 0 and m%400 != 0

  • m chia hết cho 100 nhưng không chia hết cho 400.

→ Ví dụ: m = 100 ($100 \% 100 = 0$ ✔️, $100 \% 400 = 100 \neq 0$ ✔️). Hoặc m = 200, 300, 500…

c) n%3 == 0 or (n%3 != 0 and n%4 == 0)

  • Phép or → chỉ cần một vế đúng.
  • Vế trái: n chia hết cho 3 → ví dụ n = 3, 6, 9…
  • Vế phải: n không chia hết cho 3 chia hết cho 4 → ví dụ n = 4, 8, 16…

→ Ví dụ: n = 6 (vế trái đúng) hoặc n = 8 (vế phải đúng: $8 \% 3 = 2 \neq 0$ ✔️ và $8 \% 4 = 0$ ✔️).

Dạng 4: Viết chương trình sử dụng lệnh if

Phương pháp:

  • Bước 1: Xác định dữ liệu cần nhập (kiểu gì, dùng int(input()) hay float(input())).
  • Bước 2: Xác định điều kiện cần kiểm tra và hành động tương ứng.
  • Bước 3: Chọn dạng if phù hợp:
    • Chỉ có 1 trường hợp xử lí → dạng thiếu.
    • Có 2 trường hợp (đúng/sai) → dạng đủ (if...else).
    • Có 3 trường hợp trở lên → if lồng nhau.
  • Bước 4: Viết code, chú ý dấu :thụt lề đúng.

Bài tập mẫu (SGK – Thực hành, nhiệm vụ 1): Viết chương trình nhập số tự nhiên n, thông báo n chẵn hay lẻ.

Phân tích: Kiểm tra n % 2 == 0 (chia 2 dư 0 → chẵn), ngược lại lẻ → dùng if...else:

n = int(input("Nhập số tự nhiên n: "))
if n % 2 == 0:
    print("Số đã nhập là số chẵn.")
else:
    print("Số đã nhập là số lẻ.")

Dạng 5: Viết chương trình với if lồng nhau (nhiều điều kiện)

Phương pháp:

Khi bài toán có 3 trường hợp trở lên cần xử lí khác nhau, dùng if lồng bên trong else để kiểm tra lần lượt từng điều kiện.

Cấu trúc tổng quát (3 trường hợp):

if <điều kiện 1>:
    <xử lí TH1>
else:
    if <điều kiện 2>:
        <xử lí TH2>
    else:
        <xử lí TH3>

Bài tập mẫu (SGK – Thực hành, nhiệm vụ 2): Tính tiền điện lũy kế theo 3 mức giá.

Phân tích:

Mức tiêu thụ Giá (nghìn đồng/kWh) Công thức tính
k ≤ 50 1,678 t = k × 1,678
50 < k ≤ 100 50 kWh đầu: 1,678; phần còn lại: 1,734 t = 50 × 1,678 + (k − 50) × 1,734
k > 100 50 kWh đầu: 1,678; 50 tiếp: 1,734; còn lại: 2,014 t = 50 × 1,678 + 50 × 1,734 + (k − 100) × 2,014

Có 3 trường hợp → dùng if lồng nhau:

k = float(input("Nhập số kWh tiêu thụ điện nhà em: "))
if k <= 50:
    t = k * 1.678
else:
    if k <= 100:
        t = 50 * 1.678 + (k - 50) * 1.734
    else:
        t = 50 * 1.678 + 50 * 1.734 + (k - 100) * 2.014
print("Số tiền điện phải trả là:", round(t), "nghìn đồng")

Lưu ý: Hàm round(t) dùng để làm tròn số thực t. Trong Python, phần thập phân dùng dấu chấm . (không dùng dấu phẩy ,).

III. Sơ đồ tư duy

1. Biểu thức logic

  • 1.1. Chỉ nhận giá trị True hoặc False, thuộc kiểu bool
  • 1.2. Sáu phép so sánh: <, >, <=, >=, ==, !=
  • 1.3. Ba phép toán logic: and (cả hai đúng → đúng), or (một đúng → đúng), not (đảo ngược)
  • 1.4. Thứ tự ưu tiên: số học → so sánh → notandor

2. Câu lệnh if dạng thiếu

  • 2.1. Cú pháp: if <điều kiện>: + khối lệnh thụt lề
  • 2.2. Điều kiện đúng → thực hiện; sai → bỏ qua

3. Câu lệnh if...else dạng đủ

  • 3.1. Cú pháp: if <điều kiện>: + khối lệnh 1 + else: + khối lệnh 2
  • 3.2. Điều kiện đúng → khối lệnh 1; sai → khối lệnh 2

4. Quy tắc cú pháp

  • 4.1. Bắt buộc dấu : sau điều kiện và sau else
  • 4.2. Khối lệnh thụt lề (1 Tab / 4 dấu cách), thẳng hàng
  • 4.3. if lồng nhau cho bài toán có 3+ trường hợp

IV. Sai lầm thường gặp

Sai lầm Đính chính
Quên dấu hai chấm : sau điều kiện: if x > 5 Bắt buộc phải viết if x > 5: (có dấu :). Thiếu → SyntaxError.
Không thụt lề khối lệnh trong if/else Khối lệnh bên trong phải viết lùi vào. Không thụt lề → IndentationError.
Nhầm = (gán) với == (so sánh bằng): viết if x = 5: = là lệnh gán, == mới là phép so sánh. Viết đúng: if x == 5:.
Nghĩ and cần ít nhất một vế đúng là đủ (nhầm với or) and chỉ cho True khi cả hai vế đều True. Chỉ cần một vế False → kết quả False.
Nghĩ or cần cả hai vế đúng mới đúng (nhầm với and) or chỉ cho False khi cả hai vế đều False. Chỉ cần một vế True → kết quả True.
Viết if x > 0 and < 10: (thiếu lặp lại biến ở vế phải) Python không tự hiểu biến ở vế trước. Phải viết đầy đủ: if x > 0 and x < 10:.
Trộn lẫn Tab và dấu cách khi thụt lề Nên dùng thống nhất một kiểu (khuyến nghị 4 dấu cách). Trộn lẫn → IndentationError.
Thầy Phạm Thành Danh

Thầy Phạm Thành Danh

(Người kiểm duyệt, ra đề)

Chức vụ: Trưởng ban biên soạn môn Tin Học THPT

Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1

Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa