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

تفاوت شاخص و تعداد در ساخت جمع پیشوندی پایتون

جمع پیشوندی در پایتون؛ پرس‌وجوی بازه بدون دوباره‌کاری · 0٪

✍️ اولین خانه جدول پیشوندی نماینده هیچ عضو ورودی نیست؛ جمع صفر عضو را نگه می‌دارد. همین خانه اضافه فرق اصلی شاخص ورودی با جای جدول است. مقدار ورودی با شاخص دو، هنگام ساخت مقدار prefix[3] به جمع اضافه می‌شود، چون تا آن نقطه سه عضو مصرف کرده‌ایم.

برای نمونه، [6, -2, 3] به [0,6,4,7] تبدیل می‌شود. در هر قدم، آخرین جمع آماده را از prefix[-1] می‌خوانیم و عدد تازه را به آن اضافه می‌کنیم. این -1 دسترسی به آخرین خانه جدولِ ساخته‌شده است، نه علامت شکست جست‌وجو. یک نماد در دو قرارداد می‌تواند نقش متفاوت داشته باشد.

تابع ناقص را کامل کن تا جدول تازه بسازد و ورودی را تغییر ندهد. روی فهرست خالی، همان [0] جواب است؛ نباید صفر اولیه را حذف کنیم چون بعداً فرمول بازه به آن وابسته است. خطای رایج، اضافه کردن خود عضو بدون جمع قبلی یا آغاز جدول با اولین عضو ورودی است. بعد از ساخت، طول خروجی را با len(nums)+1 مقایسه کن؛ این بررسی ساده بسیاری از خطاهای شکل جدول را آشکار می‌کند.

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

فعالیت شما

تابع build_prefix(nums) فهرست اعداد صحیح می‌گیرد و فهرست تازه prefix با طول len(nums)+1 می‌دهد؛ prefix[0]=0 و prefix[i] جمع اولین i عضو است. خالی [0]، تک‌عضوی [0,عضو]؛ منفی و صفر معتبرند. build_prefix([6,-2,3])=[0,6,4,7]. ورودی تغییر نکند. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def build_prefix(nums):
    prefix = [0]
    for number in nums:
        # TODO: append the next cumulative sum
        pass
    return prefix

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