Mini challenge — năm ca soi lỗi
Năm đoạn code sai, trải từ phép gán tới vòng lặp lồng. Với mỗi đoạn: xếp loại lỗi, đặt giả thuyết, kiểm chứng — rồi mới mở đáp án ra đối chiếu.
Nhìn một đoạn code sai suốt vài phút mà không thấy lỗi ở đâu là chuyện bình thường — nó không nói lên gì về việc bạn có hợp làm nghề này hay không.
Bài này không dạy gì mới. Ba bài vừa rồi đã đưa đủ công cụ: xếp loại lỗi, đọc traceback, và đặt giả thuyết rồi kiểm chứng. Đến lượt bạn tự cầm cả ba lên cùng lúc, trên năm đoạn code lỗi trải đều ba module trước — vài ca bạn từng gặp, nhưng lần này việc khác hẳn: không phải đoán nó in ra gì, mà xếp loại lỗi rồi tự kiểm chứng giả thuyết. Mỗi ca, trước khi bấm "Xem đáp án", tự trả lời ba câu: lỗi này loại gì — cú pháp, lúc chạy, hay logic; giả thuyết nguyên nhân của bạn là gì; và bạn kiểm chứng giả thuyết đó bằng cách nào.
1. Ca 1 — hoán đổi hai biến, mất một giá trị
Yêu cầu: người nhập liệu gõ nhầm thứ tự hai cột điểm. Đoạn dưới đây phải hoán đổi giá trị của diem_a và diem_b cho nhau — sau khi chạy xong, diem_a phải giữ giá trị CŨ của diem_b, và ngược lại.
diem_a = 8
diem_b = 5
diem_a = diem_b
diem_b = diem_a
print(diem_a, diem_b)2. Ca 2 — input() vẫn còn là chuỗi, dù người dùng gõ toàn số
Yêu cầu: hỏi điểm thi, rồi báo đạt nếu điểm từ 5 trở lên. Người dùng gõ 7.
diem_text = input("Nhap diem: ")
if diem_text >= 5:
print("Dat")
else:
print("Truot")3. Ca 3 — điều kiện luôn đúng mà không ai để ý
Yêu cầu: chỉ thưởng khi điểm đúng bằng 8 hoặc 9. Với diem = 3, đoạn dưới đây phải in ra "Khong duoc thuong".
diem = 3
if diem == 8 or 9:
print("Duoc thuong")
else:
print("Khong duoc thuong")4. Ca 4 — đếm cặp trùng, đếm luôn cả chính mình
Yêu cầu: trong danh sách ba người dưới đây, đếm xem có bao nhiêu CẶP hai người KHÁC NHAU sống cùng thành phố. Với danh sách này chỉ có đúng một cặp — người thứ nhất và người thứ ba, cùng ở Hà Nội.
thanh_pho = ["hanoi", "danang", "hanoi"]
cap_trung = 0
for tp1 in thanh_pho:
for tp2 in thanh_pho:
if tp1 == tp2:
cap_trung = cap_trung + 1
print(cap_trung)5. Ca 5 — danh sách rỗng cắn ở phép chia
Yêu cầu: tính nhiệt độ trung bình từ một danh sách ghi nhận trong ngày. Hôm nay chưa ghi được lần đo nào.
nhiet_do = []
tong = 0
for nd in nhiet_do:
tong = tong + nd
trung_binh = tong / len(nhiet_do)
print(trung_binh)6. Điều bạn vừa làm được
Năm ca, cùng một quy trình ba bước lặp lại: xếp loại lỗi trước, đặt giả thuyết về nguyên nhân, rồi kiểm chứng bằng print hoặc bằng cách đọc đúng dòng traceback — không sửa mò, không đoán bừa.
- Ca 1 và ca 4 cho thấy logic sai vẫn chạy êm, không một dòng cảnh báo — chỉ trace tay hoặc thu nhỏ dữ liệu mới bắt được.
- Ca 2 và ca 5 cho thấy cùng một cơ chế lỗi lúc chạy (dừng giữa chừng, dòng cuối traceback nêu đúng nguyên nhân) xảy ra ở hai chỗ khác hẳn nhau: một phép so sánh, một phép chia.
- Ca 3 là ca nguy hiểm nhất: nó không gãy ở bất kỳ lần thử nào cho tới khi bạn cố tình chọn một giá trị "phải sai" để kiểm tra.
Nếu bạn đoán đúng cả năm loại lỗi trước khi bấm "Xem đáp án", bạn đã có quy trình chẩn đoán dùng được ở mọi ngôn ngữ sau này, không riêng Python. Nếu sai ở ca nào, quay lại đúng bài đã recall cho ca đó và đọc lại — sai ca 1 thì về bài Biến và phép gán, sai ca 3 thì về bài Điều kiện phức hợp.
Bài tiếp theo: Tổng kết khoá — bạn đang đứng ở đâu, đi tiếp thế nào
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên