یک برنامه بنویسید که با استفاده از itertools.count و سبک برنامه‌نویسی تابعی (بدون حلقه‌های آشکار) یک جریان بی‌نهایت از اعداد اعشاری را پردازش کند و میانگین متحرک ساده با پنجرهٔ ثابت n را برای هر مقدار محاسبه و به صورت جفت (اندیس، میانگین) چاپ کند.

3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:49

0.0

برای حل این مسئله از itertools.count برای تولید اندیس‌ها (با قدم دلخواه) و از توابع تولیدی (generator) و توابعی مانند map و itertools.islice یا از collections.deque برای نگهداری پنجره استفاده کنید تا از ذخیرهٔ کامل جریان جلوگیری شود. ورودی‌ها را به صورت یک generator بگیرید، برای هر مقدار جدید پنجره را به‌روزرسانی کرده و میانگین را محاسبه کنید؛ نکته‌ها: از itertools.count(start, step) برای اندیس‌گذاری استفاده کنید، با next روی generator داده‌ها را بخوانید و برای محدود کردن خروجی در تست‌ها می‌توانید با islice نتایج اول را بگیرید، و برای عملکرد بهتر از deque با maxlen=n بهره ببرید.

توسط پژوهشگر در 202 روز قبل ساعت 02:49
دسته بندی ها: Python Python for beginner
arman در 202 روز قبل ساعت 08:22

برای کاهش مصرف حافظه و کارایی بهتر، از collections.deque با maxlen=n برای نگهداری پنجره استفاده کنید و با هر مقدار جدید، جمع پنجره را به‌روز کنید تا میانگین به‌طور O(1) محاسبه شود. با استفاده از itertools.count برای اندیس‌گذاری و یک generator می‌توان بدون حلقهٔ آشکار جریان بی‌نهایت را پردازش کرده و جفت (اندیس، میانگین) را yield کرد. برای کنترل خروجی در تست‌ها می‌توانید با itertools.islice تنها نخستین مقادیر را چاپ کنید و با next روی ورودی‌ها داده‌ها را بخوانید. نکتهٔ مهم این است که با نگهداری هم‌زمان sum_window و deque، می‌توانید از محاسبهٔ دوبارهٔ مجموع هر گام جلوگیری کنید و کد را به سبک تابعی نگه دارید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری