Giải Tin Học 10 trang 102
Lời giải chi tiết SGK Lớp 10 · Môn Tin Há»c · Trang 102–105
Bài 19: Câu lệnh rẽ nhánh if
⚠️ Lưu ý: Phần văn bản gốc gửi lên bị lỗi mã hóa (font), nên một vài hằng số trong đề bị mờ. Mình đã khôi phục theo đúng nội dung chuẩn của sách. Nếu số liệu in trong sách của em khác, chỉ cần thay con số rồi giữ nguyên cách làm là được.
🔍 Kiến thức cần nhớ
1. Biểu thức lôgic
- Là biểu thức chỉ nhận một trong hai giá trị: đúng (True) hoặc sai (False). Giá trị thuộc kiểu dữ liệu lôgic (
bool). - Đơn giản nhất là các biểu thức so sánh số hoặc xâu kí tự.
Các phép so sánh trong Python:
| Phép | Ý nghĩa |
|---|---|
< | nhỏ hơn |
> | lớn hơn |
== | bằng nhau |
<= | nhỏ hơn hoặc bằng |
>= | lớn hơn hoặc bằng |
!= | khác nhau |
Các phép toán lôgic: and (và), or (hoặc), not (phủ định).
| X | Y | X and Y | X or Y | not X |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
💡 Mẹo nhớ: -and: chỉ True khi cả hai đều True. -or: chỉ False khi cả hai đều False. -not: đảo ngược giá trị.
2. Lệnh if
Dạng thiếu:
if <điều kiện>:
Dạng đủ:
if <điều kiện>:
else:
⚠️ Lưu ý thi: Trong Python bắt buộc phải có dấu hai chấm (:) sau điều kiện, và khối lệnh phải lùi vào (thụt lề) đều nhau (thường dùng Tab hoặc dấu cách). Đây là điểm khác biệt lớn của Python so với các ngôn ngữ khác.
⚙️ Bài tập
Hoạt động 1 — Khái niệm biểu thức lôgic
Đề bài: Biểu thức nào sau đây có thể đưa vào vị trí <điều kiện> trong cấu trúc "Nếu <điều kiện> thì "?
A. m + n B. a > b C. a == b and b == c D. 100
Trả lời: Vị trí <điều kiện> cần một biểu thức lôgic (cho kết quả đúng/sai).
- B (
a > b) và C (a == b and b == c) là biểu thức lôgic → đưa vào được. - A (
m + n) và D (100) là biểu thức số học, cho ra một con số → không phải biểu thức lôgic.
➡️ Đáp án: B và C.
Câu hỏi củng cố (mục 1) — Mỗi biểu thức sau có giá trị True hay False?
Đề bài:
a) 100 % 4 == 0
b) 111 // 5 != 20 or 20 % 3 != 0
Cách 1 — Tính lần lượt từng vế
a) 100 % 4 là phần dư của 100 chia 4 = 0. Vậy 0 == 0 → True.
b) Xét hai vế của phép or:
111 // 5(chia lấy phần nguyên) = 22.22 != 20→ True.20 % 3= 2.2 != 0→ True.
True or True → True.
💡 Mẹo nhớ: Với or, chỉ cần một vế đúng là cả biểu thức đã True, có thể dừng tính ngay.
Hoạt động 2 — Cấu trúc lệnh if trong Python
Đề bài: Nhận xét gì về cấu trúc lệnh? Sau <điều kiện> có kí tự gì? Khối lệnh được viết thế nào?
Trả lời:
- Sau
<điều kiện>luôn có dấu hai chấm:. - Khối lệnh đứng sau được viết lùi vào (thụt lề) và thẳng hàng nhau.
- Python dùng thụt lề để xác định khối lệnh, thay vì dùng dấu ngoặc
{ }như nhiều ngôn ngữ khác.
Câu hỏi củng cố (mục 2) — Đoạn chương trình sau làm gì?
Đề bài:
n = int(input("Nhập n: "))
if n % 2 == 0:
print("So chan")
Trả lời: Chương trình nhập một số nguyên n, rồi kiểm tra n % 2 == 0. Nếu n chia hết cho 2 (số chẵn) thì in ra So chan; nếu n lẻ thì không in gì (vì đây là lệnh if dạng thiếu, không có else).
⚙️ THỰC HÀNH
Nhiệm vụ 1 — Kiểm tra số chẵn / số lẻ
Đề bài: Nhập số tự nhiên n, thông báo n là số chẵn hay số lẻ.
Cách 1 — Dùng phép lấy dư (theo hướng dẫn SGK)
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ẻ")
Ý tưởng: số dư của n chia 2 bằng 0 thì chẵn, ngược lại là lẻ.
Cách 2 — Đặt sẵn kết quả vào biến (gọn khi in)
n = int(input("Nhập số tự nhiên n: "))
loai = "chẵn" if n % 2 == 0 else "lẻ"
print("Số", n, "là số", loai)
Dùng biểu thức điều kiện một dòng, phù hợp khi chỉ cần chọn một trong hai giá trị.
Nhiệm vụ 2 — Tính tiền điện theo bậc thang
Đề bài: Giá điện sinh hoạt tính lũy kế theo bậc:
- Từ 0 đến 50 kWh: 1678 đồng/kWh
- Trên 50 đến 100 kWh: 1734 đồng/kWh
- Từ trên 100 kWh: 2014 đồng/kWh
Nhập số điện tiêu thụ trong tháng và tính tiền phải trả (đơn vị tính theo nghìn đồng, nên các giá là 1.678 ; 1.734 ; 2.014).
Cách 1 — Dùng if lồng nhau (theo SGK)
k = float(input("Nhập số điện tiêu thụ (kWh): "))
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ả:", t, "nghìn đồng")
Giải thích lũy kế: nếu dùng hơn 100 kWh thì 50 số đầu tính giá bậc 1, 50 số tiếp tính giá bậc 2, phần còn lại (k-100) tính giá bậc 3.
Cách 2 — Dùng if … elif (gọn hơn, không cần lồng)
k = float(input("Nhập số điện tiêu thụ (kWh): "))
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 điện phải trả:", t, "nghìn đồng")
💡 Mẹo nhớ:elif(else if) thay cho việc viếtelse: if ...lồng nhiều tầng, giúp chương trình dễ đọc khi có nhiều bậc/nhiều trường hợp.
⚙️ LUYỆN TẬP
Câu 1 — Viết biểu thức lôgic
Đề bài (số liệu khôi phục theo dạng chuẩn):
a) Số x nằm trong khoảng (2; 100)
b) Số y nằm ngoài đoạn [1; 50]
c) Số z nằm trong đoạn [0; 10] hoặc đoạn [20; 100]
Cách 1 — Dịch trực tiếp từ điều kiện sang biểu thức
a) "Nằm trong khoảng (2; 100)" nghĩa là lớn hơn 2 và nhỏ hơn 100 (không lấy hai đầu mút):
x > 2 and x < 100
b) "Nằm ngoài đoạn [1; 50]" nghĩa là nhỏ hơn 1 hoặc lớn hơn 50:
y < 1 or y > 50
c) Thuộc đoạn [0; 10] hoặc đoạn [20; 100] (đoạn có lấy cả hai đầu mút):
(z >= 0 and z <= 10) or (z >= 20 and z <= 100)
Cách 2 — Python cho phép viết gọn so sánh kép
a) 2 < x < 100
b) not (1 <= y <= 50)
c) (0 <= z <= 10) or (20 <= z <= 100)
⚠️ Lưu ý thi: Phân biệt rõ khoảng dùng<>(không lấy đầu mút) với đoạn dùng<=>=(lấy cả đầu mút). Đây là lỗi rất hay bị trừ điểm.
Câu 2 — Tìm vài giá trị thỏa mãn biểu thức
Đề bài (khôi phục):
a) 100 % m == 0 and m % 5 != 0
b) n % 100 == 0 and n % 400 != 0
c) n % 3 == 0 or (n % 3 != 0 and n % 4 == 0)
Cách 1 — Phân tích từng điều kiện
a) Cần m là ước của 100 (để 100 % m == 0) và không chia hết cho 5.
- Các ước của 100: 1, 2, 4, 5, 10, 20, 25, 50, 100.
- Bỏ những số chia hết cho 5 → còn 1, 2, 4.
- Ví dụ:
m = 2hoặcm = 4.
b) Cần n chia hết cho 100 nhưng không chia hết cho 400.
- Các bội của 100: 100, 200, 300, 400, 500, 600, 700, 800…
- Bỏ những số chia hết cho 400 (400, 800…) → ví dụ: n = 100, 200, 300, 500.
c) Đúng khi: n chia hết cho 3, hoặc (không chia hết 3 nhưng chia hết 4).
n = 3: chia hết 3 → đúng.n = 4: không chia hết 3, chia hết 4 → đúng.- Ví dụ: n = 3, 6, 9 (vế trái) hoặc n = 4, 8, 16 (vế phải).
💡 Mẹo nhớ: Bài "tìm giá trị thỏa mãn" chỉ cần nêu một vài ví dụ hợp lệ, không cần liệt kê tất cả.
⚙️ VẬN DỤNG
Câu 1 — Tính tiền mua cam
Đề bài: Mua cam dưới 5 kg: giá 12000 đồng/kg; mua từ 5 kg trở lên: giá 10000 đồng/kg. Nhập số kg, tính tiền phải trả.
Cách 1 — Lệnh if dạng đủ
m = float(input("Nhập số lượng cam mua (kg): "))
if m < 5:
tien = m * 12000
else:
tien = m * 10000
print("Số tiền phải trả:", tien, "đồng")
Lưu ý mốc 5 kg: "lớn hơn hoặc bằng 5 kg" được gộp vào nhánh else (vì m < 5 sai khi m = 5).
Cách 2 — Chọn đơn giá trước rồi nhân
m = float(input("Nhập số lượng cam mua (kg): "))
gia = 12000 if m < 5 else 10000
print("Số tiền phải trả:", m * gia, "đồng")
Câu 2 — Kiểm tra năm nhuận
Đề bài: Năm n là năm nhuận nếu n chia hết cho 400, hoặc n chia hết cho 4 nhưng không chia hết cho 100. Nhập năm n, cho biết có phải năm nhuận không.
Cách 1 — Viết thẳng biểu thức điều kiện
n = int(input("Nhập năm n: "))
if n % 400 == 0 or (n % 4 == 0 and n % 100 != 0):
print(n, "là năm nhuận")
else:
print(n, "không phải năm nhuận")
Kiểm tra thử: n = 2000 → 2000 % 400 == 0 đúng → nhuận. n = 1900 → không chia hết 400, chia hết 4 nhưng chia hết cả 100 → không nhuận. n = 2024 → chia hết 4, không chia hết 100 → nhuận. ✔
Cách 2 — Lưu kết quả vào biến lôgic
n = int(input("Nhập năm n: "))
la_nhuan = (n % 400 == 0) or (n % 4 == 0 and n % 100 != 0)
if la_nhuan:
print(n, "là năm nhuận")
else:
print(n, "không phải năm nhuận")
⚠️ Lưu ý thi: Phải đặt dấu ngoặc quanh(n % 4 == 0 and n % 100 != 0). Vìandđược ưu tiên hơnor, nếu hiểu sai thứ tự rất dễ viết sai logic năm nhuận — đây là dạng câu ra thi rất phổ biến.
🎯 Ghi nhớ: - Biểu thức lôgic chỉ nhận True/False, thuộc kiểubool. - Ba phép lôgic:and(cả hai đúng),or(một vế đúng là đủ),not(đảo ngược). - Lệnhifluôn cần dấu hai chấm và thụt lề khối lệnh; dùngif … elif … elsecho bài nhiều bậc (tính tiền điện, xếp loại…). - Khi dịch điều kiện toán học: khoảng dùng<>, đoạn dùng<=>=; vớiand/orlồng nhau nhớ thêm dấu ngoặc.
