
Hi! Let’s code a Python Palindrome Checker. We will be using Python 3.8.10. Let’s go! ✨🔥⚡
A palindrome is a word or sentence that reads the same backward and forward. We can accomplish this solution in one line:
palindrome = lambda s: \
''.join(e for e in s.lower() if e.isalnum()) == \
''.join(e for e in s[::-1].lower() if e.isalnum())
print(palindrome("level"))
print(palindrome("eyes"))
print(palindrome("ev3"))
print(palindrome("nurses run"))
print(palindrome("A man, a plan, a canal, Panama!"))
print(palindrome("Sator Arepo Tenet Opera Rotas"))
print(palindrome("72911927"))
print(palindrome("Z"))
#output
#True
#False
#False
#True
#True
#True
#True
#True
Let’s explain what is happening here:
- Recall that a lambda function in Python is an inline function with one expression. In this case we are simply comparing the original string s with its reverse s[::-1]. That is the basic comparison that this lambda function is performing. But it is doing a few more things that will help our code handle different types of input:
- The list comprehension ”.join(e for e in s.lower() if e.isalnum()) has the effect of stripping punctuation and whitespace and converting the text to lowercase before returning the same string s in the normal direction.
- The list comprehension ”.join(e for e in s[::-1].lower() if e.isalnum()) is doing the same but on the reverse of the original string before returning the reverse of the initial string s stripped of punctuation, whitespace and in lowercase.
- We do this checking so that our code can be more versatile in handling different types of input
- The lambda function palindrome will accept one parameter s and return True if the s and its reverse match (palindrome) or False if they don’t (not a palindrome).
- We provide 7 test cases with the possible ways the input can be presented to the script. We are able to detect palindromes even if punctuations, whitespaces, whole sentences, letters or numbers are in the initial string. Great isn’t it?
When the code executes we will get a list of True or False values, depending on if the word, number or sentence supplied to the lambda function palindrome is, in fact, a palindrome or not.
We can do a bit more to make this program better too! We can introduce a loop that takes a string from the user and checks to see if it is a palindrome:
def main():
s = str(input('Enter a String: '))
palindrome = lambda s: \
''.join(e for e in s.lower() if e.isalnum()) == \
''.join(e for e in s[::-1].lower() if e.isalnum())
if palindrome(s):
print(f"{s} IS A PALINDROME!")
else:
print(f"{s} IS NOT A PALINDROME!")
if __name__=='__main__':
c =""
while c != 'quit':
main()
c=str(input('Exit? (y or n): '))
if c=='y' or c=='ye' or c=='yes':
c='quit'
elif c== 'n' or c=='no':
pass
See what we did? We introduced a loop which allows us to test any amount of cases before the program exits. Awesome!
We hope that helped. Check out our List Comprehension Tutorial HERE. Thanks for reading! 👌👌👌