✍️ حالا چند بررسی را در یک مسیر پردازش جمع میکنیم. هر رکورد باید سه ستون لازم را داشته باشد، نام پاکشدهاش خالی نباشد، تعداد عدد صحیح مثبت و قیمت عدد صحیح نامنفی باشد. فقط بعد از موفقیت همه این شرطها، رکورد تازه را به خروجی اضافه میکنیم. ردیف خراب نباید بخشی از جمع آینده شود.
مثلاً رکورد دفتر با تعداد دو و قیمت پنج، به دو مقدار عددی تبدیل میشود. رکوردی با تعداد «دو» رد میشود و شمارنده یک واحد بالا میرود. اگر همان ردیف قیمت خراب هم داشته باشد، باز فقط یک ردیف نامعتبر حساب میشود. هدف اندازهگیری تعداد دادههای کنارگذاشتهشده است، نه تعداد پیامهای خطا.
تابع مستقل خودت را بنویس و از 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 آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمیگرداند.