btvn.vn
Tìm kiếm Đăng nhập

Tra cứu tên trong tệp bằng tìm kiếm tuần tự

Lưu trên thiết bị này
Kĩ thuật lập trình — CS · Chọn bài khác

Tệp mẫu và quy ước dữ liệu

Tạo tệp `diem_gia.txt` trong cùng thư mục chạy chương trình với ba dòng: ```text Lan 8.0 Minh 7.5 Vy 9.0 ``` Đây là tên, điểm giả; mỗi dòng có đúng hai phần cách nhau bởi khoảng trắng, tên gồm một từ và điểm từ 0 đến 10. Trong bài này mỗi tên là duy nhất. Nếu cần họ tên có dấu cách hoặc nhiều người trùng tên, phải đổi định dạng tệp và yêu cầu tra cứu; không thể mặc nhiên tách thành đúng hai phần.

Đọc dữ liệu và dò lần lượt

```python def doc_diem(ten_tep): ket_qua = [] with open(ten_tep, "r", encoding="utf-8") as f: for dong in f: ten, diem_chu = dong.split() ket_qua.append((ten, float(diem_chu))) return ket_qua def tra_ten(du_lieu, ten_can_tim): for ten, diem in du_lieu: if ten == ten_can_tim: return diem return None du_lieu = doc_diem("diem_gia.txt") for ten in ["Minh", "An"]: diem = tra_ten(du_lieu, ten) if diem is None: print(ten, "không có trong tệp") else: print(ten, diem) ``` Kết quả là `Minh 7.5` rồi `An không có trong tệp`. Vòng `for` kiểm từng bản ghi theo thứ tự tệp; tên và điểm nằm cùng một cặp nên không bị lệch. `None` báo không thấy, khác điểm `0.0` vẫn hợp lệ. Nếu đổi một dòng thành `Minh bảy`, `float(...)` báo lỗi: sửa dữ liệu tệp, không tự gán điểm 0. Nếu thiếu tệp, kiểm tên tệp và thư mục chạy.

Thử trường hợp điểm 0

Thêm dòng `Hoa 0` vào tệp, rồi tìm `Hoa`. Kết quả phải là `Hoa 0.0`. Phép thử này phát hiện cách viết sai `if not diem:`: điều kiện ấy nhầm điểm 0 với không tìm thấy.

Bài luyện

Với dòng `Minh 7.5`, sau `ten, diem_chu = dong.split()`, biến `diem_chu` là gì?
Chọn một đáp án

Bài luyện

Tại sao bài dùng `if diem is None` để báo không tìm thấy?
Chọn một đáp án

Bài luyện

Tệp chưa sắp xếp có thể dùng cách nào để tra một tên theo chương trình mẫu?
Chọn một đáp án

Đang học