Bài 27
Đề bài: Viết chương trình nhập ngày tháng năm hợp lệ.
Kiểm tra: tháng phải từ 1-12, ngày phải hợp lệ với tháng do,
năm phải duong. Bao lỗi cu the nếu sai.
Ví dụ:
Ngay=31, Thang=2, Nam=2024 => Loi: Thang 2 không có ngày 31
Ngay=29, Thang=2, Nam=2023 => Loi: 2023 không phải năm nhuan
Ngay=29, Thang=2, Nam=2024 => OK: 29/02/2024 hợp lệ
Đăng nhập để giáo viên có thể giao bài và nhận bài nộp của bạn.
Câu trả lời
def la_nam_nhuan(nam):
return (nam % 4 == 0 and nam % 100 != 0) or (nam % 400 == 0)
def so_ngay_trong_thang(thang, nam):
so_ngay = [0,31,28,31,30,31,30,31,31,30,31,30,31]
if thang == 2 and la_nam_nhuan(nam):
return 29
return so_ngay[thang]
while True:
try:
ngay = int(input("Nhap ngay: "))
thang = int(input("Nhap thang: "))
nam = int(input("Nhap nam: "))
if nam <= 0:
raise ValueError("Nam phai la so duong")
if not 1 <= thang <= 12:
raise ValueError(f"Thang phai tu 1 den 12, ban nhap {thang}")
max_ngay = so_ngay_trong_thang(thang, nam)
if not 1 <= ngay <= max_ngay:
raise ValueError(f"Thang {thang}/{nam} chi co {max_ngay} ngay")
print(f"OK: {ngay:02d}/{thang:02d}/{nam} hop le!")
if la_nam_nhuan(nam):
print(f"({nam} la nam nhuan)")
break
except ValueError as e:
print(f"Loi: {e}. Vui long nhap lai.\n")