Trả lời nhanh
Bài 19 gồm hai ý chính. Thứ nhất, biểu thức lôgic chỉ nhận giá trị True hoặc False (kiểu bool), được tạo từ các phép so sánh và các phép and, or, not. Thứ hai, lệnh if giúp chương trình rẽ nhánh: nếu điều kiện đúng thì làm khối lệnh 1, sai thì bỏ qua (dạng thiếu) hoặc làm khối lệnh 2 (dạng đầy đủ, có else). Sau điều kiện và sau else đều phải có dấu hai chấm, rồi lùi dòng.
Ở bài trước, em đã học các lệnh vào ra đơn giản (xem lại Bài 18 tại Lý thuyết Tin học 10 Bài 18). Chương trình khi đó chạy thẳng từ trên xuống dưới. Bài 19 dạy cách để chương trình “biết lựa chọn”: gặp tình huống này thì làm việc này, gặp tình huống khác thì làm việc khác.
1. Biểu thức lôgic
Biểu thức lôgic là biểu thức mà kết quả chỉ có thể là True (đúng) hoặc False (sai). Giá trị đó thuộc kiểu dữ liệu bool. Em có thể kiểm tra nhanh trong IDLE bằng cách gõ 5 > 3 rồi Enter, máy trả về True.
Các phép so sánh trong Python
| Kí hiệu | Ý nghĩa | Ví dụ | Kết quả |
|---|---|---|---|
| < | nhỏ hơn | 3 < 5 | True |
| > | lớn hơn | 3 > 5 | False |
| == | bằng nhau | 4 == 4 | True |
| <= | nhỏ hơn hoặc bằng | 5 <= 5 | True |
| >= | lớn hơn hoặc bằng | 2 >= 7 | False |
| != | khác nhau | 3 != 4 | True |
Các phép so sánh này cũng dùng được với xâu kí tự (so sánh theo thứ tự mã kí tự). Python còn cho viết gọn 3 <= a <= 8 để diễn tả “a thuộc đoạn [3, 8]”.
Các phép toán lôgic: and, or, not
| A | B | A and B | A or B | not A |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
Mẹo nhớ: and khắt khe, phải đúng cả hai mới đúng; or dễ tính, chỉ cần một vế đúng là đúng; not đảo ngược kết quả.
Cách viết điều kiện về khoảng, đoạn
| Yêu cầu | Biểu thức Python |
|---|---|
| a thuộc nửa khoảng (5, 7] | 5 < a <= 7 |
| a thuộc đoạn [3, 8] | 3 <= a <= 8 |
| a nằm ngoài đoạn [3, 8] | a < 3 or a > 8 |
| n là số chẵn | n % 2 == 0 |
Lỗi hay gặp: với “nằm ngoài” phải dùng or. Biểu thức a < 3 and a > 8 không có số nào thỏa mãn (không số nào vừa nhỏ hơn 3 vừa lớn hơn 8), nên luôn là False. Muốn kiểm tra, em thử với a = 1 và a = 10 là thấy ngay.
Một lỗi nữa là nhầm = (phép gán) với == (phép so sánh). Viết if n = 0: sẽ báo lỗi cú pháp.
2. Câu lệnh if
Lệnh if mô tả cấu trúc rẽ nhánh. Có hai dạng.
Dạng thiếu
if <điều kiện>:
<khối lệnh>
Python tính điều kiện. Nếu True thì thực hiện khối lệnh; nếu False thì bỏ qua và chạy sang lệnh tiếp theo nằm sau if.
Dạng đầy đủ
if <điều kiện>:
<khối lệnh 1>
else:
<khối lệnh 2>
Điều kiện True thì làm khối lệnh 1, ngược lại làm khối lệnh 2. Chắc chắn chỉ một trong hai khối được chạy.

Quy tắc viết khối lệnh
- Sau
<điều kiện>và sauelsebắt buộc có dấu hai chấm “:”. - Các lệnh thuộc cùng một khối phải lùi vào cùng một mức và thẳng hàng (thường là 1 tab hoặc 4 dấu cách). Python dùng việc lùi dòng để biết lệnh nào thuộc nhánh nào.
- Nếu lùi dòng sai, chương trình báo lỗi hoặc chạy sai ý định.
Ví dụ: giá trị tuyệt đối của hiệu hai số
a = 3
b = 10
if a > b:
print(a - b)
else:
print(b - a)
Vì 3 > 10 sai nên chương trình chạy nhánh else và in ra 7. Dù a, b nhận giá trị nào, kết quả luôn không âm.
Mở rộng: elif khi có nhiều trường hợp
Khi có từ ba trường hợp trở lên, em có thể nối thêm nhánh elif <điều kiện>: giữa if và else. Python kiểm tra lần lượt từ trên xuống và chỉ chạy nhánh đầu tiên có điều kiện đúng. Bài thực hành tiền điện bên dưới dùng đúng cách này.
3. Thực hành
Nhiệm vụ 1: Số chẵn hay số lẻ
Ý tưởng: số tự nhiên n chia hết cho 2 khi số dư n % 2 bằng 0.
n = int(input("Nhập số tự nhiên n: "))
if n % 2 == 0:
print(n, "là số chẵn")
else:
print(n, "là số lẻ")
Chạy thử: nhập 7 thì 7 % 2 = 1 nên in “7 là số lẻ”; nhập 10 thì dư 0 nên in “10 là số chẵn”. Đừng quên int(...), vì input() luôn trả về xâu kí tự.
Nhiệm vụ 2: Tính tiền điện lũy kế
Đề bài cho giá theo bậc: 50 kWh đầu giá 1,678 nghìn đồng/kWh; từ kWh thứ 51 đến 100 giá 1,734; từ kWh thứ 101 trở lên giá 2,014. Gọi k là số kWh tiêu thụ, ta chia ba trường hợp:
- k ≤ 50: tiền = k × 1,678
- 50 < k ≤ 100: tiền = 50 × 1,678 + (k − 50) × 1,734
- k > 100: tiền = 50 × 1,678 + 50 × 1,734 + (k − 100) × 2,014
k = int(input("Số kWh tiêu thụ: "))
if k <= 50:
t = k * 1.678
elif 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 phải trả (nghìn đồng):", round(t))
Kiểm tra bằng tay:
- k = 40: t = 40 × 1,678 = 67,12, làm tròn là 67 nghìn đồng.
- k = 80: t = 83,9 + 30 × 1,734 = 83,9 + 52,02 = 135,92, làm tròn là 136 nghìn đồng.
- k = 120: t = 83,9 + 86,7 + 20 × 2,014 = 83,9 + 86,7 + 40,28 = 210,88, làm tròn là 211 nghìn đồng.
Lưu ý: trong Python số thập phân viết bằng dấu chấm (1.678), không phải dấu phẩy. Hiểu “lũy kế” là chỉ phần vượt bậc mới tính giá cao hơn, không phải toàn bộ số điện đều tính giá bậc cuối.
4. Lỗi sai thường gặp khi dùng if
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Quên dấu “:” sau điều kiện hoặc else | SyntaxError | Thêm dấu hai chấm |
| Không lùi dòng khối lệnh | IndentationError | Lùi vào và thẳng hàng |
| Dùng = thay cho == | Lỗi cú pháp | So sánh dùng == |
| Quên chuyển kiểu dữ liệu khi nhập số | So sánh sai hoặc báo lỗi | Dùng int() hoặc float() |
| Dùng and thay cho or với “nằm ngoài” | Điều kiện luôn False | Dùng or |
5. Bài luyện tập có đáp án
Câu 1. Giá trị của biểu thức (m + 4) % 5 == 0 với m = 6 là gì?
Đáp án: (6 + 4) % 5 = 10 % 5 = 0 nên biểu thức là True.
Câu 2. Đoạn chương trình sau in ra gì?
x = 5
y = 6
if x > y:
print('Max:', x)
else:
print('Max:', y)
Đáp án: 5 > 6 sai nên chạy nhánh else, in ra Max: 6 (hàm print tự thêm một dấu cách giữa các đối số).
Câu 3. Viết điều kiện kiểm tra năm y là năm nhuận (chia hết cho 4 nhưng không chia hết cho 100, hoặc chia hết cho 400).
Đáp án: (y % 4 == 0 and y % 100 != 0) or y % 400 == 0. Thử: 2024 là True; 1900 là False; 2000 là True.
Câu 4. Viết chương trình nhập số thực a, in “dương” nếu a > 0, “âm” nếu a < 0, ngược lại in “bằng không”.
Đáp án:
a = float(input("a = "))
if a > 0:
print("dương")
elif a < 0:
print("âm")
else:
print("bằng không")
Câu 5. Phát biểu “Khối lệnh sau if không bắt buộc phải lùi vào” đúng hay sai?
Đáp án: Sai. Trong Python, lùi dòng thẳng hàng là bắt buộc, nếu không chương trình báo lỗi.
Tóm tắt cần nhớ
- Biểu thức lôgic chỉ có True hoặc False, kiểu bool; không có giá trị thứ ba.
- Sáu phép so sánh:
< > == <= >= !=; ba phép lôgic: and, or, not. - if dạng thiếu: điều kiện đúng thì làm, sai thì bỏ qua. if dạng đầy đủ: có thêm else cho trường hợp sai.
- Luôn có dấu “:” và lùi dòng thẳng hàng cho mỗi khối lệnh.
Học tiếp và luyện tập
- Giải SGK Tin học 10 Bài 19: Câu lệnh rẽ nhánh if
- 20 câu trắc nghiệm Tin học 10 Bài 19 có đáp án
- Sách bài tập Tin học 10 Bài 19
- Lý thuyết Tin học 10 Bài 20: Câu lệnh lặp for
- Lý thuyết Tin học 10 – Kết nối tri thức (toàn bộ)
Câu hỏi thường gặp
Biểu thức lôgic trong Python nhận những giá trị nào?
Chỉ nhận True hoặc False và thuộc kiểu bool. Không có giá trị thứ ba như undefined.
Khác nhau giữa = và == trong Python là gì?
Dấu = là phép gán, dùng để lưu giá trị vào biến. Dấu == là phép so sánh bằng, cho kết quả True hoặc False, dùng trong điều kiện của if.
Khi nào dùng if dạng thiếu, khi nào dùng dạng đầy đủ?
Dùng dạng thiếu khi chỉ cần làm thêm việc khi điều kiện đúng, còn sai thì không làm gì. Dùng dạng đầy đủ (có else) khi cả hai trường hợp đúng và sai đều cần xử lý riêng.
Vì sao chương trình báo lỗi IndentationError?
Vì các lệnh trong khối sau if hoặc else chưa lùi vào hoặc lùi không thẳng hàng. Python dùng việc lùi dòng để xác định khối lệnh nên cần lùi cùng một mức.