✍️ ظاهر یک تاریخ برای معتبر بودن کافی نیست. تعداد روزهای ماه و کبیسه بودن سال هم باید درست باشد. بهتره این قواعد را دوباره با چند شرط دستی ننویسیم؛ date.fromisoformat برای روز نامعتبر ValueError میدهد. برای شکل دقیق هم خروجی isoformat را با متن اولیه مقایسه میکنیم.
برای مثال 2026-04-31 نامعتبر است چون آوریل سی روز دارد. حالا خروجی این کد را مشخص کن:
from datetime import date
values = ['2024-02-29', '2025-02-29', '2026-12-01']
valid = []
for text in values:
try:
day = date.fromisoformat(text)
valid.append(day.isoformat() == text)
except ValueError:
valid.append(False)
print(valid)
اولین سال کبیسه است و بیستونهم فوریه دارد؛ سال بعد چنین روزی ندارد. مورد سوم یک تاریخ عادی معتبر است. خطای رایج، پذیرفتن همه روزهای یک تا سیویک در همه ماهها یا تصور اینه که تاریخ نامعتبر خودکار به ماه بعد منتقل میشود. این تابع چنین اصلاح پنهانی انجام نمیدهد؛ داده غلط باید توسط کد ما رد شود. تعداد خروجی هم باید دقیقاً با سه تاریخ ورودی برابر بماند.
فعالیت شما
فهرست بولی اعتبار سه تاریخ را انتخاب کن؛ 2024 کبیسه و 2025 غیرکبیسه است و تاریخ ناممکن ValueError میدهد.