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