در این قسمت تیم کدگیت را با آموزش واروخوانه در پایتون (palindrome) همراهی کنید. ابتدا واروخوانه را تعریف خواهیم کرد و در ادامه روش‌های بازگشتی و غیربازگشتی این الگوریتم را توضیح خواهیم داد. پس با ما همراه باشید تا این الگوریتم را معرفی کنیم. اگر تمایل دارید می توانید پیش‌نیازهای زیر را نیز مطالعه نمایید:

واروخوانه

تعریف واروخانه بسیار ساده است. فرض کنید عددی در اختیار دارید برابر با 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 بازگردانده می شود. روش‌های بازگشتی کمی پیچیده تر به نظر می رسند اما با دیباگ کردن کد به سادگی آن می توان پی برد. پیشنهاد می‌کنیم حتما کد بخش پایانی را دیباگ کنید.