در این قسمت تیم کدگیت را با آموزش واروخوانه در پایتون (palindrome) همراهی کنید. ابتدا واروخوانه را تعریف خواهیم کرد و در ادامه روشهای بازگشتی و غیربازگشتی این الگوریتم را توضیح خواهیم داد. پس با ما همراه باشید تا این الگوریتم را معرفی کنیم. اگر تمایل دارید می توانید پیشنیازهای زیر را نیز مطالعه نمایید:
- تبدیل نوع در پایتون
- تابع در پایتون
- دیکشنری در پایتون
- حلقه while در پایتون
- حلقه for در پایتون
- دستور if در پایتون
- لیست در پایتون
واروخوانه
تعریف واروخانه بسیار ساده است. فرض کنید عددی در اختیار دارید برابر با 123321 و می خواهید بررسی کنید واروخوانه است یا خیر؟ اگر عدد را برعکس کنید (از راست به چپ) و برابر با عدد اصلی بود این عدد واروخوانه است. حال اگر رشتهای در اختیار دارید برابر با “code” و میخواهید بررسی کنید واروخوانه است یا خیر؟ String را برعکس میکنیم که edoc میشود. این رشته با رشته اصلی یعنی code برابر نیست پس این رشته palindrome نیست.
به طور کلی واروخوانه به واژه، جمله، عدد، شعر یا هر چیز دیگری می گویند که خواندن آن از چپ به راست یا از راست به چپ کاملاً یکسان باشد. مثالهای بالا نمایانگر این تعریف هستند. حال میخواهیم درون زبان برنامه نویسی پایتون این الگوریتم را پیاده سازی کنیم.
واروخوانه در پایتون
برای پیاده سازی الگوریتم واروخوانه می توان از دو روش بازگشتی و غیر بازگشتی استفاده کرد. در ابتدا ما روشهای غیر بازگشتی را توضیح خواهیم داد.
روش غیر بازگشتی
همانطور که میدانید برای پیاده سازی یک الگوریتم راههای مختلفی وجود دارد. در این قسمت چندین نوع پیاده سازی مختلف خواهیم دید که همگی یک نتیجه دارند. روش اول استفاده از لیست است. فرض کنید رشتهای داریم به نام s و می خواهیم ترتیب کاراکترها را برعکس کنیم. برای این کار از روش slicing استفاده خواهیم کرد. معکوس s را با s[::-1] نمایش میدهند. حال با دانستن این موضوع کد زیر را ببینید:
def isPalindrome(s):
return s == s[::-1]
s = "codegate"
if isPalindrome(s):
print("Yes")
else:
print("No")
در کد بالا تابعی نوشتیم به نام isPalindrome که یک String را در ورودی دریافت میکند و این String را با معکوس خود بررسی می کند. اگر هر دو با هم برابر باشد True در خروجی قرار میگیرد در غیر اینصورت false بازگردانی میشود. در ادامه یک string با مقدار codegate ایجاد کرده و به تابع isPalindrome دادهایم. در صورتی که رشته s واروخوانه باشد در خروجی yes چاپ می شود و در غیر این صورت false.
استفاده از حلقه for
در روش دوم پیاده سازی غیر بازگشتی واروخوانه در پایتون از حلقه for کمک خواهیم گرفت. تابعی به نام isPalindrome می نویسیم که s را در ورودی دریافت می کند. کاراکتر اول String با کاراکتر انتهای String مقایسه میکنیم. سپس کاراکتر دوم را با کاراکتر دوم از انتهای String مقایسه میکنیم. این کار را تا جایی ادامه میدهیم که به وسط String برسیم. پس یک حلقه مینویسیم که تا وسط String برود. کد این پیاده سازی به صورت زیر است:
def isPalindrome(s):
for i in range(0, int(len(s)/2)):
if s[i] != s[len(s)-i-1]:
return False
return True
s = "12321"
if isPalindrome(s):
print("Yes")
else:
print("No")
روش بازگشتی واروخوانه در پایتون
برای پیاده سازی روش بازگشتی الگوریتم واروخوانه در پایتون ابتدا کاراکتر اول و آخر را با یکدیگر مقایسه و بررسی مابقی String به صورت بازگشتی انجام می گردد. کد این الگوریتم به صورت زیر است:
def isPalindrome(s):
s = s.lower()
l = len(s)
if l < 2:
return True
elif s[0] == s[l - 1]:
return isPalindrome(s[1: l - 1])
else:
return False
s = "codegate"
if isPalindrome(s):
print("Yes")
else:
print("No")
در تابع isPalindrome سه شرط قرار دادیم. شرط اول بررسی می کند طول String ورودی کمتر از دو می باشد یا خیر، در حقیقت اگر طول String ورودی 1 باشد پس String واروخوانه است و true بازگردانی می شود. در شرط دوم کاراکترهای ابتدایی و انتهایی String ورودی بررسی می شوند که اگر با هم برابر باشند باید مابقی String (به جز کاراکتر ابتدا و انتها) مورد بررسی به صورت بازگشتی قرار گیرد. در شرط آخر نیز اگر کارکتر ابتدا و انتها برابر نباشند False بازگردانده می شود. روشهای بازگشتی کمی پیچیده تر به نظر می رسند اما با دیباگ کردن کد به سادگی آن می توان پی برد. پیشنهاد میکنیم حتما کد بخش پایانی را دیباگ کنید.