Giải Tin Học 10 trang 104
Lời giải chi tiết SGK Lớp 10 · Môn Tin Há»c · Trang 104–105
Nguon: Tin Hoc 10 - Ket Noi Tri Thuc Voi Cuoc Song (trang 104 – 105)
🔍 Kiến thức cần nhớ
Bài học xoay quanh câu lệnh điều kiện if trong Python (cấu trúc rẽ nhánh).
Dạng thiếu:
if <điều kiện>:
Python kiểm tra điều kiện, nếu đúng thì thực hiện khối lệnh, sai thì bỏ qua.
Dạng đủ:
if <điều kiện>:
else:
Nếu điều kiện đúng thực hiện khối lệnh 1, ngược lại thực hiện khối lệnh 2.
💡 Mẹo nhớ: Khối lệnh trong Python luôn viết sau dấu ":" và lùi vào thẳng hàng (mặc định 1 tab hay 4 dấu cách). Đây là điểm khác biệt của Python so với nhiều ngôn ngữ khác.
⚠️ Lưu ý thi: Từ khoáifvàelsephải viết thẳng lề trái. Quên dấu ":" hoặc lùi đầu dòng sai là lỗi cú pháp (IndentationError) rất hay gặp.
⚙️ Bài tập
Câu hỏi (trang 103)
Đề bài: Đ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!")
Trả lời:
Đoạn chương trình thực hiện việc kiểm tra tính hợp lệ của dữ liệu nhập vào:
- Lệnh
inputyêu cầu người dùng nhập một số,int()chuyển xâu nhập được thành số nguyên và gán cho biếnk. - Lệnh
if k <= 0:kiểm tra: nếuknhỏ hơn hoặc bằng 0 (tức làkkhông phải số nguyên dương) thì in ra thông báo"Bạn nhập sai rồi!". - Nếu
k > 0(số nguyên dương hợp lệ) thì chương trình không in gì thêm.
Tóm lại: chương trình cảnh báo khi người dùng nhập sai yêu cầu (số phải là số nguyên dương).
💡 Mẹo nhớ: Đây là dạng dùngifthiếu (không cóelse) để kiểm tra lỗi nhập liệu — một kỹ thuật rất phổ biến.
⚙️ Thực hành
Nhiệm vụ 1
Đề bài: Viết chương trình nhập số tự nhiên n, thông báo n là số chẵn hay số lẻ.
Phân tích: Dùng phép lấy số dư n % 2. Nếu số dư bằng 0 thì n chẵn, ngược lại n lẻ.
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ẻ.")
💡 Mẹo nhớ:n % 2 == 0là điều kiện kinh điển để xét chẵn/lẻ. Lưu ý dùng==(so sánh) chứ không phải=(gán).
Nhiệm vụ 2
Đề bài: Tính tiền điện theo lũy kế:
- 0 → 50 kWh: 1,678 nghìn đồng/kWh
- 51 → 100 kWh: 1,734 nghìn đồng/kWh
- Từ 101 trở lên: 2,014 nghìn đồng/kWh
Viết chương trình nhập số điện tiêu thụ và tính số tiền phải trả.
Phân tích: Gọi k là số kWh tiêu thụ. Tính theo từng bậc thang:
- Nếu k ≤ 50: tiền = k × 1,678
- Nếu 50 < k ≤ 100: tiền = 50 × 1,678 + (k − 50) × 1,734
- Nếu k > 100: tiền = 50 × 1,678 + 50 × 1,734 + (k − 100) × 2,014
Cách 1 — Lồng if...else (theo sách)
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")
Cách 2 — Dùng if...elif...else (gọn hơn)
k = float(input("Nhập số kWh tiêu thụ điện nhà em: "))
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ả là:", round(t), "nghìn đồng")
⚠️ Lưu ý thi: Trong máy tính dùng dấu chấm "." để viết số thập phân (1.678) chứ không dùng dấu phẩy. Hàm round(t) dùng để làm tròn số thực t.
💡 Mẹo nhớ:elifchính là cách viết gọn củaelse: iflồng nhau, giúp chương trình dễ đọc hơn.
⚙️ Luyện tập
Câu 1
Đề bài: Viết biểu thức lôgic ứng với mỗi câu sau.
a) Số x nằm trong khoảng (0; 10).
Khoảng (0; 10) là tập các số lớn hơn 0 và nhỏ hơn 10 (không lấy hai đầu mút):
0 < x and x < 10
(có thể viết gọn: 0 < x < 10)
b) Số y nằm ngoài đoạn [1; 2].
"Ngoài đoạn [1; 2]" nghĩa là y nhỏ hơn 1 hoặc y lớn hơn 2:
y < 1 or y > 2
c) Số z nằm trong đoạn [0; 1] hoặc [5; 10].
Mỗi đoạn lấy cả hai đầu mút (dùng ≤), hai đoạn nối với nhau bằng or:
(0 <= z and z <= 1) or (5 <= z and z <= 10)
💡 Mẹo nhớ: Khoảng ( ) dùng dấu<>(không lấy mút); đoạn [ ] dùng<=>=(lấy mút). "Trong" → nối bằngand, "ngoài" → nối bằngor.
Câu 2
Đề bài: Tìm một vài giá trị m, n thoả mãn các biểu thức sau.
a) 100%m == 0 and n%5 != 0
100%m == 0: m là ước của 100, tức m ∈ {1, 2, 4, 5, 10, 20, 25, 50, 100}.n%5 != 0: n không chia hết cho 5.
Ví dụ: m = 25, n = 7 (vì 100 % 25 = 0 và 7 % 5 = 2 ≠ 0). Hoặc m = 4, n = 11.
b) m%100 == 0 and m%400 != 0
m%100 == 0: m chia hết cho 100.m%400 != 0: m không chia hết cho 400.
Tức m là bội của 100 nhưng không là bội của 400.
Ví dụ: m = 200 (200 % 100 = 0 và 200 % 400 = 200 ≠ 0). Hoặc m = 300, m = 700.
c) n%3 == 0 or (n%3 != 0 and n%4 == 0)
Biểu thức đúng khi: n chia hết cho 3, hoặc (n không chia hết cho 3 nhưng chia hết cho 4).
Ví dụ:
- n = 9: 9 % 3 = 0 → vế trái đúng.
- n = 8: 8 % 3 = 2 ≠ 0 và 8 % 4 = 0 → vế phải đúng.
- n = 6: 6 % 3 = 0 → đúng.
⚠️ Lưu ý thi: Cẩn thận phân biệt%(lấy số dư) với phép chia thường.a % b == 0nghĩa là a chia hết cho b.
⚙️ Vận dụng
Câu 1
Đề bài: Giá bán cam: nếu mua dưới 5 kg thì 12 000 đồng/kg; nếu mua từ 5 kg trở lên thì 10 000 đồng/kg. Viết chương trình nhập số lượng mua (kg) và tính số tiền phải trả.
Phân tích: Gọi m là số kg cam.
- Nếu m < 5: tiền = m × 12 000
- Nếu m ≥ 5: tiền = m × 10 000
m = float(input("Nhập số lượng cam mua (kg): "))
if m < 5:
t = m * 12000
else:
t = m * 10000
print("Số tiền phải trả là:", round(t), "đồng")
💡 Mẹo nhớ: "Dưới 5 kg" dùngm < 5; "lớn hơn hoặc bằng 5 kg" tự động rơi vào nhánhelse, không cần viết lại điều kiện.
Câu 2
Đề 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 đồng thời không chia hết cho 100). Viết chương trình nhập năm n và cho biết n có phải năm nhuận hay không.
Phân tích: Điều kiện năm nhuận:
(n % 400 == 0) or (n % 4 == 0 and n % 100 != 0)
n = int(input("Nhập số 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 là năm nhuận.")
Kiểm tra thử:
- n = 2000: 2000 % 400 = 0 → năm nhuận. ✔
- n = 2024: 2024 % 4 = 0 và 2024 % 100 = 24 ≠ 0 → năm nhuận. ✔
- n = 1900: 1900 % 400 = 300 ≠ 0; 1900 % 4 = 0 nhưng 1900 % 100 = 0 → không nhuận. ✔
- n = 2023: không chia hết cho 4 → không nhuận. ✔
⚠️ Lưu ý thi: Đừng quên điều kiện "không chia hết cho 100". Năm như 1900, 2100 chia hết cho 4 nhưng không phải năm nhuận vì chia hết cho 100 mà không chia hết cho 400. Hãy dùng dấu ngoặc để gộp đúng nhóm and.
🎯 Ghi nhớ: - Câu lệnhif/elsethể hiện cấu trúc rẽ nhánh: khối lệnh viết sau dấu ":" và lùi vào thẳng hàng. - Toán tử logic:and(và),or(hoặc),not(phủ định) dùng để ghép nhiều điều kiện. - Phép%(lấy số dư) là công cụ chủ lực để xét chia hết, chẵn/lẻ, năm nhuận. - Với bài toán nhiều bậc (tiền điện, tiền hàng) nên dùngif...elif...elseđể chương trình gọn và dễ kiểm soát.
