C8-13 · Tìm lỗi: đếm loại
Xem dạng PDFĐề
Đây là bài tìm lỗi. Đề gốc: cho n rồi n dòng, mỗi dòng một chữ loại (A, B, C, D hoặc F); in mỗi loại và số lần gặp, theo thứ tự xuất hiện lần đầu.
Một bạn đã viết chương trình dưới đây, nhưng nộp lên hệ thống thì bị Runtime Error:
dem = {}
for _ in range(int(input())):
loai = input()
dem[loai] += 1
for loai, so in dem.items():
print(loai, so)
Nhiệm vụ: tìm nguyên nhân lỗi (Python báo lỗi gì, ở dòng nào, vì sao), sửa chương trình bằng mẫu đếm ở mục 8.2 rồi nộp bản đã sửa. Bài được chấm theo đề gốc.
Dữ liệu vào
- Dòng đầu chứa n.
- n dòng tiếp theo, mỗi dòng một chữ loại.
Kết quả
Mỗi loại có mặt một dòng: chữ loại và số lần gặp, cách nhau một dấu cách; các dòng theo thứ tự loại đó xuất hiện lần đầu. Loại không gặp thì không in.
Ràng buộc
- ~1 \le n \le 10^5~.
- Mỗi chữ loại là một trong
A,B,C,D,F.
Ví dụ
Dữ liệu vào:
3
B
A
B
Kết quả:
B 2
A 1
Giải thích ví dụ
Loại B gặp ở dòng 1 và dòng 3 (2 lần), loại A gặp ở dòng 2 (1 lần). B xuất hiện trước nên in trước. Các loại C, D, F không gặp nên không in.
Với dữ liệu này, chương trình gốc dừng ngay ở lần lặp đầu tiên: hãy tự chạy thử để thấy thông báo lỗi, rồi đối chiếu với bảng 8.7 (Lỗi thường gặp).
Lưu ý
- Sửa đúng phải giữ thứ tự xuất hiện: không sắp lại, không tạo sẵn đủ năm loại (sẽ in cả loại có 0 lần).
- Phần "giải thích" của bài tập trong sách do giảng viên chấm riêng; máy chấm chỉ chấm chương trình đã sửa.
Nguồn: Bài C8-13, mục 8.9, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.
Nguồn trong sách: bài tập C8-13 (mục 8.9) · Mức: (**)