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

شمارش ردیف نامعتبر فروش در پایتون؛ اعتبارسنجی چند شرط

اعتبارسنجی داده فروش پایتون؛ رد کردن ردیف خراب و شمارش خطا · 0٪

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

مثلاً رکورد دفتر با تعداد دو و قیمت پنج، به دو مقدار عددی تبدیل می‌شود. رکوردی با تعداد «دو» رد می‌شود و شمارنده یک واحد بالا می‌رود. اگر همان ردیف قیمت خراب هم داشته باشد، باز فقط یک ردیف نامعتبر حساب می‌شود. هدف اندازه‌گیری تعداد داده‌های کنارگذاشته‌شده است، نه تعداد پیام‌های خطا.

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

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

فعالیت شما

تابع validate_items(rows) فهرست دیکشنری‌ها می‌گیرد؛ کلیدهای product,quantity,unit_price اجباری‌اند و مقادیر موجود رشته‌اند. محصول strip و غیرخالی، quantity با int و >0، unit_price با int و >=0 معتبر است. ردیف نامعتبر را رد و دقیقاً یک بار بشمار. خروجی {'valid_rows':[رکوردهای تازه با همین سه کلید و عددهای تبدیل‌شده به ترتیب ورودی],'invalid_rows':عدد} است؛ کلید اضافی نادیده گرفته شود. rows خالی دو خروجی [] و 0 دارد؛ {} یک نامعتبر است. مثال محصول ' دفتر '، تعداد '2' و قیمت '0' رکورد معتبر دفتر با عددهای 2 و 0 می‌دهد. ورودی تغییر نکند. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمی‌گرداند.

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

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

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

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

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

def validate_items(rows):
    # TODO: normalize valid rows and count each rejected row once
    pass


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