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

رفع خطای طول نامعتبر پنجره لغزان در پایتون

پنجره لغزان در پایتون؛ جمع بازه ثابت و مقدارهای منفی · 0٪

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

برای مثال، در [5, 2] با طول چهار هیچ پنجره چهارعضوی وجود ندارد؛ جمع هفت پاسخ این قرارداد نیست. از طرف دیگر، طول دو دقیقاً معتبر است و باید هفت بدهد. همین برابری معمولاً در شرط‌های مرزی خراب می‌شود: >= به جای > تنها پنجره کامل را هم رد می‌کند.

تابع این تمرین فقط جمع اولین پنجره را برمی‌گرداند تا خطای اعتبارسنجی را جدا ببینیم. برای طول نامعتبر None می‌دهیم، نه صفر؛ صفر ممکن است جمع یک پنجره معتبر باشد. شرط کد اولیه را اصلاح کن و حواست به k منفی باشد. خطای رایج، تکیه کردن به رفتار برش برای تشخیص اعتبار است؛ برش منفی یا بیش‌ازحد در پایتون الزاماً خطا نمی‌دهد، ولی معنی مسئله را هم خودکار رعایت نمی‌کند.

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

تابع first_window_sum(nums,k) فهرست اعداد صحیح و طول صحیح می‌گیرد. اگر 1<=k<=len(nums)، جمع k عضو اول را برگرداند؛ در k<=0 یا k>len(nums)، از جمله خالی، None بده. k=len معتبر است و جمع صفر با None فرق دارد. first_window_sum([5,2],2)=7؛ ورودی تغییر نکند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def first_window_sum(nums, k):
    if k < 0 or k >= len(nums):
        return None
    return sum(nums[:k])

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = first_window_sum(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result