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

رفع باگ گزارش روزانه پایتون؛ تجمیع به جای بازنویسی

گزارش فروش پایتون؛ شمارش، مبلغ و خروجی قابل خواندن · 0٪

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

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

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

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

فعالیت شما

تابع revenue_by_day(rows) فهرست رکوردهای معتبر دارای date دقیق ISO، quantity صحیح مثبت و unit_price صحیح نامنفی می‌گیرد. دیکشنری {روز:جمع مبلغ ردیف‌ها} بده؛ ردیف‌های هم‌روز حتی غیرمتوالی تجمیع شوند و درآمد صفر حذف نشود. خالی {}؛ دو ردیف یک روز با (2,5) و (1,7) جمع 17 می‌دهند. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمی‌گرداند.

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

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

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

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

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

def revenue_by_day(rows):
    totals = {}
    for row in rows:
        totals[row['date']] = row['quantity'] * row['unit_price']
    return {day: totals[day] for day in sorted(totals)}


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