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

Kiểm tra ngày, tháng, năm hợp lệ

Lưu trên thiết bị này
Thực hành tổng hợp Python · Chọn bài khác

Tháng phải hợp lệ trước khi lấy số ngày

Năm dương lịch nhuận khi chia hết cho 400, hoặc chia hết cho 4 mà không chia hết cho 100. Ví dụ 2024 nhuận, 2023 không nhuận, 1900 không nhuận, 2000 nhuận. Tháng 2 có 29 ngày trong năm nhuận, 28 ngày trong năm thường. Chỉ số `thang-1` chỉ dùng được **sau khi** xác nhận tháng từ 1 đến 12; năm phải từ 1 trở lên. Nhiệm vụ: lưu `kiem-ngay.py`, chạy năm bộ ngày mẫu và đối chiếu `True`/`False`: ```python def nhuan(nam): return nam % 400 == 0 or (nam % 4 == 0 and nam % 100 != 0) def hop_le(ngay, thang, nam): if nam < 1 or thang < 1 or thang > 12: return False so_ngay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if nhuan(nam): so_ngay[1] = 29 return 1 <= ngay <= so_ngay[thang - 1] for ngay_thang_nam in [(29, 2, 2024), (29, 2, 2023), (31, 4, 2025), (31, 12, 2025), (1, 0, 2025)]: print(ngay_thang_nam, hop_le(*ngay_thang_nam)) ``` Kết quả lần lượt là `True`, `False`, `False`, `True`, `False`. Danh sách số ngày được tạo **mới trong mỗi lời gọi**, nên thử năm nhuận không làm tháng 2 của lần gọi năm thường thành 29. Nếu bài nhận xâu dạng `ngày-tháng-năm`, cần kiểm có đúng ba phần và đổi được thành số trước khi gọi hàm; mã trên dùng sẵn bộ ba số để tập trung vào quy tắc ngày.

Bài luyện

`hop_le(29, 2, 2024)` trả gì?
Chọn một đáp án

Bài luyện

Vì sao `hop_le` kiểm tháng 1–12 trước biểu thức `so_ngay[thang-1]`?
Chọn một đáp án

Bài luyện

Vì sao tạo `so_ngay` mới trong mỗi lần gọi `hop_le`?
Chọn một đáp án

Bài luyện

Với `(31, 4, 2025)`, kết quả nào đúng?
Chọn một đáp án

Đang học