حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش کار با فایل در پایتون؛ CSV، JSON و گزارش‌گیری

گروه‌بندی تاریخ‌ها بر اساس روز در پایتون

تاریخ فروش در پایتون؛ ISO، بازه بسته و گروه‌بندی روز · 0٪

✍️ گروه‌بندی یعنی چند رکورد با یک کلید مشترک را در یک خلاصه جمع کنیم. این بار فقط تعداد رخداد هر روز را می‌خواهیم، نه تعداد کالا یا مبلغ. اگر یک روز سه بار در ورودی باشد، شمارنده آن سه می‌شود؛ دو تاریخ یکسان قرار نیست به عنوان «داده تکراری نامعتبر» حذف شوند.

مثلاً تاریخ‌های اول نوامبر 2026-11-01، دوم نوامبر و دوباره اول نوامبر، گروه‌هایی با تعداد دو و یک می‌سازند. قبل از افزودن به شمارنده، تاریخ باید روز واقعی و شکل دقیق ISO داشته باشد. تاریخ خراب به هیچ گروهی تعلق نمی‌گیرد.

تابع مستقل بنویس و برای هر تاریخ معتبر از دیکشنری شمارش استفاده کن. ترتیب کلیدهای دیکشنری مهم نیست؛ هر تاریخ معتبر باید تعداد درست خود را داشته باشد. خطای رایج، استفاده از set است که تعداد رخدادها را از بین می‌برد، یا شمارش تاریخ ناممکن فقط به دلیل داشتن خط تیره. ورودی خالی دیکشنری خالی می‌دهد. نیازی به ساعت سیستم یا کتابخانه بیرونی نیست؛ همه داده‌ها در آرگومان آمده‌اند.

تابع آماده course_check از ورودی کپی عمیق می‌گیرد، تابع اصلی را اجرا می‌کند و تغییر ورودی را رد می‌کند؛ آن را نگه دار و فقط تابع اصلی را کامل کن.

فعالیت شما

تابع count_by_day(values) فهرست رشته‌های تاریخ می‌گیرد؛ فقط تاریخ واقعی و دقیق YYYY-MM-DD را بشمارد و دیکشنری {تاریخ:تعداد رخداد} برگرداند. نامعتبرها و فاصله‌دارها نادیده گرفته شوند؛ تکرار معتبر باید شمرده شود. خالی {}؛ count_by_day(['2026-11-01','2026-11-01'])={'2026-11-01':2}. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمی‌گرداند.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

from datetime import date
def count_by_day(values):
    # TODO: validate each date before adding it to a counter
    pass


def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = count_by_day(*args)
    if args != before:
        raise AssertionError("ورودی نباید تغییر کند.")
    return result