✍️ گزارش نهایی برای هر محصول دو مقدار نگه میدارد: total_quantity و total_revenue. اولی جمع تعداد کالاهای آن محصول است و دومی جمع مبلغ همه فروشهای آن. این دو نباید با هم اشتباه شوند؛ قیمت واحد بدون ضرب در تعداد، درآمد واقعی نیست.
مثلاً برای دو فروش دفتر با تعداد دو و قیمت ده، و تعداد یک و قیمت بیست، خروجی محصول باید تعداد سه و درآمد چهل داشته باشد. اگر فقط قیمتهای واحد را جمع کنیم، سی میشود و فروش چندعددی کمتر حساب میشود. هر ردیف مستقل است، حتی اگر نام و قیمتش با ردیف دیگری یکسان باشد.
کد اولیه شکل گروه و جمع تعداد را درست دارد، ولی جمع درآمد را ناقص محاسبه میکند. آن را اصلاح کن و ورودی را تغییر نده. داده این گام نرمالشده و معتبر است، پس لازم نیست دوباره تاریخ یا رشتههای عددی را بررسی کنی. محصول با فروش رایگان باید در گروهها باقی بماند و تعدادش شمرده شود. خطای رایج، استفاده از یک دیکشنری مشترک برای همه گروههاست؛ هر محصول باید خلاصه جداگانه خودش را داشته باشد. ترتیب کلیدهای دیکشنری در پاسخ مهم نیست؛ مقدار هر گروه باید درست باشد.
تابع آماده course_check از ورودی کپی عمیق میگیرد، تابع اصلی را اجرا میکند و تغییر ورودی را رد میکند؛ آن را نگه دار و فقط تابع اصلی را کامل کن.
فعالیت شما
تابع sales_by_product(rows) رکوردهای معتبر date ISO، product پاکشده، quantity صحیح>0 و unit_price صحیح>=0 میگیرد. خروجی {محصول:{'total_quantity':جمع تعداد,'total_revenue':جمع quantity*unit_price}} است؛ ترتیب کلیدهای محصول مهم نیست. تکرارها همه تجمیع شوند، قیمت متفاوت جدا محاسبه شود و قیمت صفر محصول را حذف نکند. خالی {}؛ دو دفتر با (2,10) و (1,20) خلاصه quantity=3 و revenue=40 دارند. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمیگرداند.