تشخیص پالیندروم در پایتون

آسانرشته

صورت سؤال

برنامه‌ای بنویسید که یک خط متن را از ورودی بخواند. اگر متن پالیندروم بود «پالیندروم است» و در غیر این صورت «پالیندروم نیست» را چاپ کند.

بزرگی و کوچکی حروف و فاصله‌ها نباید در نتیجه اثر بگذارند؛ یعنی عبارت Never Odd Or Even هم پالیندروم حساب می‌شود.

ورودی نمونه

Never Odd Or Even

خروجی نمونه

پالیندروم است

خودتان امتحان کنید

کد را در ویرایشگر زیر کامل کنید و اجرا کنید. ورودی نمونه در کادر ورودی آماده است و بعد از هر اجرا، خروجی شما با خروجی نمونه مقایسه می‌شود.

Ctrl + Enter
خروجی

کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.

راهنمایی

اول با lower() همهٔ حروف را کوچک کنید و با replace(" ", "") فاصله‌ها را بردارید. بعد کافی است متن تمیزشده را با معکوس خودش مقایسه کنید.

جواب و توضیح

بهتر است جواب را بعد از امتحان کردن راه خودتان باز کنید.

نمایش جواب
text = input()

clean = text.lower().replace(" ", "")

if clean == clean[::-1]:
    print("پالیندروم است")
else:
    print("پالیندروم نیست")

این جواب چطور کار می‌کند؟

متد lower() همهٔ حروف بزرگ را کوچک می‌کند و replace(" ", "") هر فاصله را با رشتهٔ خالی جایگزین می‌کند. بعد از این دو قدم، Never Odd Or Even به neveroddoreven تبدیل می‌شود.

عبارت clean[::-1] معکوس رشتهٔ تمیزشده است. اگر رشته با معکوس خودش برابر باشد، از دو طرف یکسان خوانده می‌شود و پالیندروم است.

این دو متد رشتهٔ اصلی را تغییر نمی‌دهند و رشتهٔ تازه‌ای برمی‌گردانند. به همین دلیل نتیجه در متغیر clean نگه داشته شده است.

راه دوم: مقایسه از دو سر با حلقه

text = input()
clean = text.lower().replace(" ", "")

left = 0
right = len(clean) - 1
is_palindrome = True
while left < right:
    if clean[left] != clean[right]:
        is_palindrome = False
        break
    left += 1
    right -= 1

if is_palindrome:
    print("پالیندروم است")
else:
    print("پالیندروم نیست")

این روش حرف اول را با حرف آخر، حرف دوم را با یکی مانده به آخر و به همین ترتیب تا وسط مقایسه می‌کند. رشتهٔ معکوس تازه‌ای نمی‌سازد و با دیدن اولین اختلاف متوقف می‌شود. در درس الگوریتم معمولاً همین راه را می‌خواهند.

اشتباه‌های رایج

  • حروف را کوچک نمی‌کنند و Level پالیندروم تشخیص داده نمی‌شود، چون L و l دو حرف متفاوت‌اند.
  • فاصله‌ها را حذف نمی‌کنند و تقریباً هیچ جمله‌ای پالیندروم از آب درنمی‌آید.
  • text.lower() را می‌نویسند ولی نتیجه را جایی نگه نمی‌دارند و تصور می‌کنند خود text تغییر کرده است.

تمرین بعدی

پایتون را قدم‌به‌قدم یاد بگیرید

این تمرین یکی از تمرین‌های پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره می‌گیرد؛ درس‌های اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.