C8-13 · Tìm lỗi: đếm loại

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Đề

Đâ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: (**)


Đang tải...