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

تکمیل گزارش روزانه پروژه CSV به JSON در پایتون

پروژه CSV به JSON با پایتون؛ گزارش فروش معتبر و قابل بازخوانی · 0٪

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

مثلاً اگر روز اول دو دفتر با قیمت ده و یک مداد با قیمت پنج فروخته شده باشد، خلاصه آن روز تعداد سه و درآمد بیست‌وپنج دارد. روز دوم از نو گروه خودش را می‌گیرد. اگر ردیف‌های روز اول در ورودی از هم جدا باشند، باز باید در همان گروه جمع شوند.

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

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

فعالیت شما

تابع sales_by_day(rows) رکوردهای معتبر با date دقیق ISO، product، quantity صحیح>0 و unit_price صحیح>=0 می‌گیرد؛ خروجی {روز:{'total_quantity':جمع تعداد,'total_revenue':جمع مبلغ ردیف‌ها}} بدهد؛ ترتیب کلیدهای روز مهم نیست. ردیف‌های هم‌روز با محصول‌های متفاوت و غیرمتوالی تجمیع شوند؛ درآمد صفر معتبر. خالی {}؛ یک روز با (2,10) و (1,5) خلاصه تعداد3 و درآمد25 دارد. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمی‌گرداند.

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

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

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

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

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

def sales_by_day(rows):
    groups = {}
    for row in rows:
        day = row['date']
        if day not in groups:
            groups[day] = {'total_quantity': 0, 'total_revenue': 0}
        # TODO: update both counters for this day
    return {key: groups[key] for key in sorted(groups)}


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