Giải Tin Học 10 trang 142
Lời giải chi tiết SGK Lớp 10 · Môn Tin Há»c · Trang 142–143
Nguon: Tin Hoc 10 - Ket Noi Tri Thuc Voi Cuoc Song (trang 142 – 143)
🔍 Kiến thức cần nhớ
Bài 29 giới thiệu về nhận biết lỗi chương trình. Một chương trình hoàn chỉnh nhận dữ liệu đầu vào (Input), xử lí và đưa ra kết quả (Output). Trong quá trình lập trình, chương trình có thể gặp lỗi ở nhiều nơi và thuộc nhiều loại khác nhau.
Tổng thể, lỗi chương trình Python được chia thành ba loại:
| Loại lỗi | Đặc điểm | Thông báo |
|---|---|---|
| 1. Lỗi cú pháp (Syntax Error) | Viết sai cú pháp hoặc sai cấu trúc ngôn ngữ Python quy định | Chương trình lập tức dừng và báo SyntaxError |
| 2. Lỗi ngoại lệ (Exceptions Error / lỗi Runtime) | Không thể thực hiện một lệnh khi đang chạy | Chương trình dừng và trả về mã lỗi như ValueError, IndexError... |
| 3. Lỗi lôgic (lỗi ngữ nghĩa) | Chương trình chạy bình thường, không báo lỗi, nhưng kết quả sai | Không có mã lỗi nào được trả lại |
Bốn trường hợp minh họa trong bài:
- TH1: Sai cú pháp lệnh (thiếu dấu
:) →SyntaxError(lỗi cú pháp). - TH2: Nhập
1.5choint()→ValueError(lỗi Runtime/ngoại lệ). - TH3: Truy cập
A[i]vượt giới hạn mảng →IndexError(lỗi Runtime/ngoại lệ). - TH4: Tính tổng nhưng dùng
range(3)cho ra 0+1+2=3 thay vì 1+2+3=6 → không báo lỗi nhưng kết quả sai (lỗi lôgic).
💡 Mẹo nhớ: Phân biệt nhanh 3 loại lỗi: - Cú pháp → máy báo SyntaxError, chương trình chưa kịp chạy. - Ngoại lệ (Runtime) → đang chạy thì dừng, có mã lỗi (xxxError). - Lôgic → chạy "ngon lành", không có lỗi nhưng đáp án sai.
⚠️ Lưu ý thi: Lỗi lôgic là loại nguy hiểm và khó phát hiện nhất vì máy không hề báo lỗi. Đây là điểm hay được hỏi trong đề kiểm tra.
⚙️ Bài tập
Câu 1
Đề bài: Khi gõ sai cú pháp một lệnh, chương trình sẽ dừng lại và báo lỗi, đó là lỗi loại gì?
Cách 1 — Đối chiếu định nghĩa
Khi người lập trình viết sai cú pháp lệnh (sai cấu trúc ngôn ngữ Python quy định), Python không thể hiểu được lệnh nên chương trình lập tức dừng lại ngay trước khi thực hiện và thông báo lỗi.
→ Đây là lỗi cú pháp (Syntax Error), thuộc loại 1 trong ba loại lỗi.
Ví dụ minh họa từ bài học:
>>> while True print("Hello")
SyntaxError: invalid syntax
Lệnh while True thiếu dấu hai chấm : nên Python báo SyntaxError.
Cách 2 — Nhận diện qua dấu hiệu
Dấu hiệu nhanh để khẳng định: máy trả về thông báo bắt đầu bằng chữ SyntaxError. Hễ thấy SyntaxError thì chắc chắn đó là lỗi cú pháp — lỗi xảy ra khi chương trình chưa chạy.
🎯 Ghi nhớ: Sai cú pháp lệnh = lỗi cú pháp (SyntaxError), chương trình dừng ngay lập tức.
Câu 2
Đề bài: Bài toán yêu cầu sắp xếp dãy số ban đầu thành dãy tăng dần. Giả sử dãy số ban đầu là [3, 1, 8, 10, 0]. Kết quả thu được dãy [1, 3, 8, 10, 0]. Chương trình có lỗi không? Nếu có thì lỗi đó thuộc loại gì?
Cách 1 — Kiểm tra kết quả theo yêu cầu bài toán
Bước 1: Xác định kết quả đúng. Sắp xếp dãy [3, 1, 8, 10, 0] thành dãy tăng dần thì kết quả đúng phải là:
[0, 1, 3, 8, 10]
Bước 2: So sánh với kết quả chương trình thu được:
[1, 3, 8, 10, 0]
Bước 3: Nhận xét. Dãy này chưa được sắp xếp tăng dần (số 0 vẫn đứng cuối, lẽ ra phải đứng đầu) ⇒ kết quả sai so với yêu cầu.
Bước 4: Tuy nhiên, chương trình vẫn chạy bình thường, không bị dừng và không có mã lỗi nào được trả về.
→ Vậy chương trình CÓ lỗi, và đó là lỗi lôgic (lỗi ngữ nghĩa bên trong chương trình) — thuộc loại 3.
Cách 2 — Loại trừ theo ba loại lỗi
- Chương trình chạy được đến cùng → không phải lỗi cú pháp (loại 1).
- Chương trình không báo mã lỗi (không có ValueError, IndexError...) → không phải lỗi ngoại lệ/Runtime (loại 2).
- Còn lại: chạy không lỗi nhưng kết quả không đúng → chính là lỗi lôgic (loại 3).
Nguyên nhân thường gặp: thuật toán sắp xếp viết thiếu/sai một bước (ví dụ thiếu một vòng lặp so sánh nên phần tử nhỏ nhất là 0 chưa được đẩy về đầu dãy).
💡 Mẹo nhớ: Khi đề cho "kết quả sai nhưng máy không báo lỗi" → gần như chắc chắn là lỗi lôgic.
⚠️ Lưu ý thi: Câu hỏi dạng "chương trình có lỗi không?" rất dễ bị trả lời "không có lỗi" vì thấy máy chạy bình thường. Phải nhớ: kết quả sai cũng là một loại lỗi — lỗi lôgic.
🎯 Ghi nhớ: Chạy được + không báo lỗi + kết quả sai = lỗi lôgic. Đây là loại lỗi khó tìm nhất, cần kiểm tra bằng cách so sánh kết quả với yêu cầu bài toán.
