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 ":"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á ifelse phả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 input yê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ến k.
  • Lệnh if k <= 0: kiểm tra: nếu k nhỏ hơn hoặc bằng 0 (tức là k khô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ùng if thiế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 == 0 là đ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ớ: elif chính là cách viết gọn của else: if lồ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 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ằng and, "ngoài" → nối bằng or.

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 == 0 nghĩ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ùng m < 5; "lớn hơn hoặc bằng 5 kg" tự động rơi vào nhánh else, 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ệnh if/else thể 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ùng if...elif...else để chương trình gọn và dễ kiểm soát.
Chế độ đọc sách →