سلام دوست عزیز😃👋

به مسابقه «المپیک فناوری: Python/Django» خوش آمدی!

لینک‌های مفید برای شرکت در مسابقه:

نوع داوری سوالات مسابقه:

  • جمع دو عدد: برای آشنایی با سیستم داوری
  • بی‌عملگر: ورودی/خروجی
  • دیوارهای شرکت:‌ ورودی/خروجی
  • کَش شرطی: پایتون
  • اخبار المپیک: پایتون
  • چالش کوئرا: جنگو

هرگونه ارتباط با سایر شرکت‌کنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکت‌کنندگان مسابقه حذف می‌شوید.

در طول مسابقه، می‌توانید سؤالات خود را از قسمت «سوال بپرسید» مطرح کنید.

موفق باشید 😉✌

کَش شرطی


هلیا با مشکل کند بودن اجرای توابعش روبه‌رو شده‌است و می‌خواهد نتیجه‌ی اجرای توابع را برای مدتی در حافظه نگه دارد تا هربار که تابع را با همان ورودی‌های قبلی اجرا می‌کند، محاسبات تابع از نو اجرا نشوند. به او کمک کنید یک دکوراتور بنویسد که این کار را برای او انجام دهد.

دکوراتور شما (به نام conditional_cache) باید مدت زمان نگهداری نتایج، شرط نگهداری نتایج و بیشینهٔ حجم کش را ورودی بگیرد. در صورتی که شرط برقرار نبود، تابع موردنظر نباید اجرا شود. در غیر این صورت، اگر نتایج ذخیره‌شده منقضی نشده بودند، مقدار ذخیره‌شده برگردانده شود و در غیر این‌صورت تابع اجرا شود و مقدار جدید آن برگردانده شود.

همچنین برای جلوگیری از دسترسی هم‌زمان به مقادیر ذخیره‌شده و ایجاد Race Condition، باید دسترسی به این مقادیر محدود شود و در هر لحظه تنها یک امکان دسترسی به آن وجود داشته باشد.

نمونه🔗

اجرا🔗

import time
def is_positive(x):
    return x > 0

@conditional_cache(expiry=5, condition=is_positive)
def compute_square(x):
    print(f"Computing square of {x}")
    return x * x

print(compute_square(3))
time.sleep(2)
print(compute_square(3))
time.sleep(4)
print(compute_square(3))
print(compute_square(-3))
Python

خروجی🔗

Computing square of 3
9
9
Computing square of 3
9
None
Plain text

پروژه‌ی اولیه🔗

پروژه‌ی اولیه‌ی این سؤال را می‌توانید از این لینک دانلود کنید.

نحوه‌ی ارسال🔗

این سؤال از نوع سؤالات تک‌فایل است. شما باید تابع conditional_cache موجود در فایل main.py را تکمیل و سپس این فایل را ارسال کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.