✍️ بعضی فرمولها فقط روی بازههای وسط فهرست ظاهراً درست به نظر میرسند. آزمون بازهای که از صفر شروع میشود، تعریف جدول را بهتر محک میزند. در تعریف ما prefix[left] سهم اعضای قبل از بازه است؛ وقتی left صفر باشد، آن سهم واقعاً صفر است و در خانه صفر آماده داریم.
برای مثال، در جدول [0,5,7,11] که از [5,2,4] ساخته شده، جمع خانههای صفر تا یک برابر prefix[2]-prefix[0] یعنی هفت است. اگر به جای آن prefix[left-1] بنویسی، پایتون از شاخص منفی یک استفاده میکند و آخرین جمع را کم میکند. برنامه ممکن است بدون خطای اجرا، جواب کاملاً نادرست بدهد.
تابع این تمرین خود جدول آماده را میگیرد؛ دوباره آن را نساز. تمام بازههای دادهشده معتبر و بستهاند، پس لازم نیست رفتار بازه معکوس یا بیرون محدوده تعریف کنی. خطای رایج، اضافه کردن یک شرط ویژه فقط برای left صفر است، در حالی که فرمول عمومی درست همه حالتها را پوشش میدهد. اول تعریف «جمع اولین i عضو» را کنار فرمول بنویس، بعد شاخص اشتباه را اصلاح کن.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع range_from_prefix(prefix,left,right) یک جدول معتبر با صفر ابتدایی از ورودی عدد صحیح و دو شاخص معتبر 0<=left<=right<n میگیرد؛ جمع بازه بسته را عددی برگرداند. n=len(prefix)-1؛ ورودی خالی برای این تابع بازه ندارد و ارسال نمیشود. بازه تکعضوی و left=0 معتبرند؛ range_from_prefix([0,5,7,11],0,1)=7. ورودی تغییر نکند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.