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

Tra mọi điểm trong một khoảng

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

Thêm dữ liệu để thử hai đầu mút

Dùng lại `diem_gia.txt` ở L15 rồi thêm hai dòng `Hoa 6.0` và `Binh 8.0`. Yêu cầu tìm mọi tên có điểm trong khoảng từ 6.0 đến 8.0, **gồm cả** 6.0 và 8.0. Theo thứ tự tệp, kết quả phải là `Lan 8.0`, `Minh 7.5`, `Hoa 6.0`, `Binh 8.0`. Dữ liệu giả này chưa được sắp xếp.

Duyệt toàn tệp chưa sắp xếp

```python def tra_khoang(ten_tep, thap, cao): if thap > cao: raise ValueError("Cận dưới phải không lớn hơn cận trên") tim_thay = [] with open(ten_tep, "r", encoding="utf-8") as f: for dong in f: ten, diem_chu = dong.split() diem = float(diem_chu) if thap <= diem <= cao: tim_thay.append((ten, diem)) return tim_thay for ten, diem in tra_khoang("diem_gia.txt", 6.0, 8.0): print(ten, diem) ``` Chạy sau khi bổ sung tệp sẽ in bốn dòng dự kiến. Điều kiện `thap <= diem <= cao` giữ cả hai đầu mút; vòng lặp không dừng ở lần khớp đầu vì cần **mọi** tên. Thử khoảng 9.5–10.0 sẽ cho danh sách rỗng, không in dòng nào. Nếu cận dưới lớn hơn cận trên, chương trình báo lỗi rõ ràng. Tệp vẫn phải đúng định dạng một tên một từ và một điểm số trên mỗi dòng.

Nếu điểm đã được sắp tăng

Nếu các cặp tên–điểm được sắp theo điểm tăng, có thể tìm vị trí đầu có điểm **≥ cận dưới** và vị trí đầu có điểm **> cận trên** bằng cách thu hẹp nửa dãy, rồi lấy các bản ghi giữa hai vị trí. Với tệp chưa sắp trong bài này, duyệt từng dòng là cách đơn giản và đúng. Dù sắp theo điểm, phải chuyển **cả cặp** (tên, điểm); chỉ sắp riêng điểm sẽ ghép sai người và điểm.

Bài luyện

Khoảng đóng từ 6.0 đến 8.0 nhận điểm nào?
Chọn một đáp án

Bài luyện

Vì sao chương trình tiếp tục duyệt sau khi gặp tên đầu tiên phù hợp?
Chọn một đáp án

Bài luyện

Nếu sắp theo điểm để tra khoảng, cần giữ điều gì?
Chọn một đáp án

Đang học