> Yes, this is a correct observation, but it is not necessary to compare > the halves; Simply compare the complete string with its reverse. If > they match, it is a palindrome.
I've always used to implement the is_palindrome function as you suggest, i.e. comparing the original string with the reverse one, but while reading, I tought about a imho nicer version which prevent from creating another string. Here are both the recursive/iterative versions of the function: def palindrome(str, i=0, j=-1): try: if str[i] == str[j]: return palindrome(str, i + 1, j - 1) return False except IndexError: return True def palindrome(str, i=0, j=-1): try: while True: if str[i] != str[j]: return False i, j = i + 1, j - 1 return True except IndexError: return True Regards, Matteo > >> Here's a possible (and a >> bit tricky) Python 2.x implementation: >> >> def is_palindrom(s): >> s = s.lower() >> slen = len(s) >> until = slen / 2 # Python 2x integer division >> offset = int(not(slen % 2)) >> runtil = until - offset >> return s[0:until] == s[-1:runtil:-1] >> >> > > At first glance this seems to be correct, but it is tricky indeed. > Particularly the assignment of the offset variable, casting a bool to > an integer of a negated expression. Given that Baba notes that this is > a beginners level query, it wouldn't have hurt to be a little bit more > verbose there. > > Richard > -- > http://mail.python.org/mailman/listinfo/python-list > -- Matteo Landi http://www.matteolandi.net/ -- http://mail.python.org/mailman/listinfo/python-list