✍️ برای گزارش روزانه همان دو شاخص را با کلید تاریخ جمع میکنیم. یک محصول میتواند در چند روز فروش داشته باشد و یک روز هم چند محصول داشته باشد؛ پس گروه محصول و گروه روز، دو نمای متفاوت از همان ردیفها هستند. مجموع درآمد در هر دو نما باید با درآمد کل سازگار بماند.
مثلاً اگر روز اول دو دفتر با قیمت ده و یک مداد با قیمت پنج فروخته شده باشد، خلاصه آن روز تعداد سه و درآمد بیستوپنج دارد. روز دوم از نو گروه خودش را میگیرد. اگر ردیفهای روز اول در ورودی از هم جدا باشند، باز باید در همان گروه جمع شوند.
تابع ناقص گروه هر روز را ایجاد میکند؛ دو بهروزرسانی داخل حلقه را کامل کن. نیازی به فایل در این مرحله نیست چون آرگومان، رکوردهای معتبر نرمالشده است؛ کار فایل در تابع نهایی دوباره مستقل انجام میشود. خطای رایج، کلید گرفتن 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 آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمیگرداند.