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

ساخت گزارش متنی ثابت و خوانای فارسی با پایتون

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

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

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

تابع را از صفر بنویس: مبلغ هر ردیف، جمع کل و جمع هر روز را حساب کن، خط اول را بساز و سپس روزهای مرتب‌شده را اضافه کن. بین خط‌ها دقیقاً یک \n بگذار و پایان خط اضافه نده. خطای رایج، استفاده از ترتیب اولین مشاهده روزها یا برگرداندن print به جای رشته است. برای ورودی خالی فقط خط درآمد صفر را می‌خواهیم. در پروژه بعد همین منطق را به جای متن، داخل JSON ذخیره می‌کنیم تا برنامه دیگری هم بتواند آن را بخواند.

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

فعالیت شما

تابع readable_report(rows) رکوردهای معتبر date دقیق ISO و quantity>0 و unit_price>=0 صحیح می‌گیرد. رشته خروجی: خط اول دقیقاً 'درآمد کل: N'؛ سپس برای هر روز با ترتیب صعودی یک خط 'YYYY-MM-DD: M' با درآمد آن روز. عددها لاتین، بدون هزارگان و پایان خط اضافه؛ بین خط‌ها یک \n. خالی فقط 'درآمد کل: 0'. برای یک ردیف 2026-01-01 با تعداد2 و قیمت5 خروجی 'درآمد کل: 10\n2026-01-01: 10' است. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمی‌گرداند.

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

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

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

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

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

def readable_report(rows):
    # TODO: aggregate, order the days and return one formatted string
    pass


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