✍️ بازه گزارش میتواند بسته باشد؛ یعنی روز شروع و پایان هم داخل نتیجه قرار بگیرند. اگر از مقایسه سخت کوچکتر استفاده کنیم، فروشهای دقیقاً روی دو مرز حذف میشوند. این خطا روی دادههای وسط بازه دیده نمیشود، پس آزمون مرزی برای چنین تابعی ضروری است.
مثلاً برای بازه دهم تا دوازدهم اکتبر، یعنی 2026-10-10 تا 2026-10-12، هر سه روز دهم، یازدهم و دوازدهم معتبرند. اگر شروع و پایان یک روز باشند، همان یک روز باید قابل انتخاب باشد، نه اینکه نتیجه همیشه خالی شود.
کد اولیه اعتبار تاریخهای ورودی را بررسی و داده خراب را رد میکند، اما شرط بازه دو مرز را جا انداخته است. آن را اصلاح کن و ترتیب و تکرار تاریخهای ورودی را نگه دار. start و end در این تمرین معتبرند و start از end دیرتر نیست. خطای رایج، مرتب کردن خروجی به جای حفظ ترتیب خواستهشده یا پذیرفتن تاریخ با فاصله دو سر است. شکل دقیق ISO همچنان لازم است؛ فقط محصول را در پروژه strip میکنیم، نه تاریخ را.
تابع آماده course_check از ورودی کپی عمیق میگیرد، تابع اصلی را اجرا میکند و تغییر ورودی را رد میکند؛ آن را نگه دار و فقط تابع اصلی را کامل کن.
فعالیت شما
تابع filter_dates(values,start,end) فهرست رشتهها و دو تاریخ دقیق معتبر ISO با start<=end میگیرد. فقط تاریخهای واقعی با شکل دقیق YYYY-MM-DD و در بازه بسته start<=day<=end را، با همان ترتیب و تکرار ورودی، بده؛ نامعتبرها نادیده گرفته شوند. خالی []؛ شروع=پایان معتبر است. filter_dates(['2026-10-10','2026-10-12'],'2026-10-10','2026-10-12') هر دو را نگه میدارد. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمیگرداند.