XS-04 · Tách thành hàm
Xem dạng PDFĐề
Phần 4 của bài toán xuyên suốt "Điểm học phần". Viết lại XS-03 (mục 4.7) bằng hai hàm dùng suốt đến Chương 10:
| Hàm | Việc làm |
|---|---|
tinh_diem_hp(diem_qt, diem_ck) |
trả về điểm học phần ~0{,}4 \times~ quá trình ~+~ ~0{,}6 \times~ cuối kỳ, đã làm tròn 1 chữ số thập phân |
xep_loai(diem_hp) |
trả về một trong "A", "B", "C", "D", "F" theo ngưỡng của XS-02 |
Ngưỡng xếp loại (theo điểm đã làm tròn): A nếu ~\ge 8{,}5~; B từ ~7{,}0~ đến dưới ~8{,}5~; C từ ~5{,}5~ đến dưới ~7{,}0~; D từ ~4{,}0~ đến dưới ~5{,}5~; F dưới ~4{,}0~.
Ngoài thống kê của XS-03, in thêm điểm học phần và loại của từng sinh viên. Sinh viên đạt nghĩa là loại khác F.
Kiến thức dùng (Chương 5): def, return, tham số, kiểm thử hàm bằng assert.
Dữ liệu vào
- Dòng đầu: số nguyên ~n~ — số sinh viên.
- ~n~ dòng tiếp theo, mỗi dòng hai số thực
diem_qt diem_ckcách nhau một dấu cách.
Kết quả
- ~n~ dòng đầu, theo thứ tự nhập: điểm học phần (đúng 1 chữ số thập phân), một dấu cách, chữ cái xếp loại.
- Dòng tiếp theo: số sinh viên đạt và số không đạt, cách nhau một dấu cách.
- Dòng cuối: điểm học phần cao nhất, đúng 1 chữ số thập phân.
Tổng cộng ~n + 2~ dòng.
Ràng buộc
- ~1 \le n \le 100~.
- ~0 \le~ mỗi điểm ~\le 10~; mỗi điểm viết dạng số nguyên (
10) hoặc có đúng một chữ số thập phân (7.5), dùng dấu chấm.
Ví dụ
Dữ liệu vào:
6
7.5 8.0
6.5 7.0
8.0 8.8
4.0 4.0
5.0 3.0
10.0 10.0
Kết quả:
7.8 B
6.8 C
8.5 A
4.0 D
3.8 F
10.0 A
5 1
10.0
Giải thích ví dụ
Ca 1–6 của bộ sinh viên mẫu. Sáu dòng đầu là từng sinh viên: chẳng hạn người thứ ba có ~0{,}4 \times 8{,}0 + 0{,}6 \times 8{,}8 = 8{,}48~, tinh_diem_hp trả về ~8{,}5~ (đã làm tròn) nên xep_loai cho A. Người thứ tư được đúng ~4{,}0~ → D, vẫn đạt. Chỉ người thứ năm (~3{,}8~, loại F) không đạt, nên dòng thống kê là 5 1; cao nhất là 10.0.
Các ca kiểm thử in trong sách, nên tự chạy trước khi nộp:
| Dữ liệu vào | Kết quả | Ý nghĩa |
|---|---|---|
2 / 3.9 4.0 / 3.9 3.9 |
4.0 D / 3.9 F / 1 1 / 4.0 |
hai phía của ngưỡng 4,0 |
1 / 8.0 8.8 |
8.5 A / 1 0 / 8.5 |
8,48 → 8,5 loại A |
2 / 9.0 7.0 / 6.5 7.0 |
7.8 B / 6.8 C / 2 0 / 7.8 |
hai điểm lệch nhau: lộ việc đảo đối số |
(dấu / ngăn cách các dòng)
Lưu ý khi nộp
- Hệ thống chỉ chấm phần in ra, không kiểm tên hàm; nhưng hãy viết đúng hai hàm như đề — các phần sau (XS-05…XS-08, Chương 10) gọi lại nguyên vẹn.
- Hàm trả về (
return), khôngprintbên trong hàm: in trong hàm sẽ làm thừa dòng và hiện chữNone. - Gọi đúng thứ tự đối số:
tinh_diem_hp(diem_qt, diem_ck). - Các
asserttrong chương trình được phép giữ lại khi nộp (chạy đúng thì không in gì).
Nguồn trong sách: Bài XS-04, mục 5.7, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: XS (bài toán xuyên suốt, phần 4/8)