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

رفع باگ تجمیع محصول در پروژه گزارش فروش پایتون

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

✍️ گزارش نهایی برای هر محصول دو مقدار نگه می‌دارد: 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 آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمی‌گرداند.

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

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

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

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

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

def sales_by_product(rows):
    groups = {}
    for row in rows:
        product = row['product']
        if product not in groups:
            groups[product] = {'total_quantity': 0, 'total_revenue': 0}
        groups[product]['total_quantity'] += row['quantity']
        groups[product]['total_revenue'] += row['unit_price']
    return {key: groups[key] for key in sorted(groups)}


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