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

رفع خطای مرزی تابع palindrome در پایتون

الگوی دو اشاره‌گر در پایتون؛ دو سر فهرست و حذف تکرار · 0٪

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

مثلاً متن noon چهار نویسه دارد و اولین جفت باید خانه صفر با خانه سه باشد. بعد از برابر بودن آن‌ها، خانه یک با خانه دو مقایسه می‌شود. متن خالی و تک‌حرفی در قرارداد این تمرین قرینه‌اند، چون هیچ جفت نابرابری ندارند. اگر راست را با len(text)-1 بسازی، همین دو حالت بدون دسترسی به نویسه هم درست می‌مانند.

کد اولیه را با کمترین تغییر منطقی اصلاح کن. مقایسه کاملاً دقیق است؛ برای مثال Aa قرینه نیست. خطای رایجِ بعدی، بازگرداندن True داخل حلقه پس از یک جفت برابر است؛ موفقیت فقط بعد از بررسی همه جفت‌ها قطعی می‌شود. خروجی باید بولی بماند و ورودی رشته است، پس لازم نیست درباره فهرست یا عدد تصمیم تازه‌ای بگیری.

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

فعالیت شما

تابع is_palindrome(text) یک رشته می‌گیرد و اگر خواندن نویسه‌هایش از دو سمت دقیقاً یکسان است True بدهد، وگرنه False. حروف بزرگ/کوچک، فاصله و نشانه را تغییر نده. خالی و تک‌نویسه True؛ is_palindrome('noon')=True و is_palindrome('Aa')=False. از دو شاخص استفاده کن. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def is_palindrome(text):
    left, right = 0, len(text)
    while left < right:
        if text[left] != text[right]:
            return False
        left += 1
        right -= 1
    return True

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