تشخیص پالیندروم در پایتون
پالیندروم کلمه یا عبارتی است که از اول و از آخر یکسان خوانده میشود؛ مثل level یا racecar. برای تشخیص آن در پایتون، اول متن را یکدست میکنید، یعنی حروف را کوچک و فاصلهها را حذف میکنید، و بعد آن را با معکوسش مقایسه میکنید.
صورت سؤال
برنامهای بنویسید که یک خط متن را از ورودی بخواند. اگر متن پالیندروم بود «پالیندروم است» و در غیر این صورت «پالیندروم نیست» را چاپ کند.
بزرگی و کوچکی حروف و فاصلهها نباید در نتیجه اثر بگذارند؛ یعنی عبارت Never Odd Or Even هم پالیندروم حساب میشود.
ورودی نمونه
Never Odd Or Even
خروجی نمونه
پالیندروم است
خودتان امتحان کنید
کد را در ویرایشگر زیر کامل کنید و اجرا کنید. ورودی نمونه در کادر ورودی آماده است و بعد از هر اجرا، خروجی شما با خروجی نمونه مقایسه میشود.
کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.
راهنمایی
اول با 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 تغییر کرده است.
تمرین بعدی
پایتون را قدمبهقدم یاد بگیرید
این تمرین یکی از تمرینهای پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره میگیرد؛ درسهای اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.