Python Palindrome Method: Detect Words, Sentences

Check words and sentences to see if they are palindromes. Use a while true loop and handle spaces and punctuation.
Palindrome. A palindrome reads the same forwards and backwards. Some common words, like "level" are palindromes. But some entire sentences are also palindromes. We can check these in Python with a simple method.Strings
Example. To check for a palindrome, we use a loop to consider the start and end characters of a string together. We move inwards until we are at the center. If both halves of the string have equal characters, we have a palindrome.

Lines: In this list, I specify an assortment of known palindromes (like "civic"). Punctuation and whitespace is included.

Maketrans: With this method, we create a dictionary to replace all punctuation with spaces. It also lowercases letters.

Translate: This method applies the dictionary created by maketrans to remove unwanted characters. Replace then eliminates spaces.

Info: We pass the reduced strings (which have no punctuation, capital letters or whitespace) to the is_palindrome method.

Python program that checks for palindromes def is_palindrome(value): min = 0 max = len(value) - 1 # Scan string for letter equality at each end. # ... Move indexes closer to the center after each check. while True: # Return true if all characters were checked. if min > max: return True; a = value[min] b = value[max] # Return false is characters are not equal. if a != b: return False; # Move inwards. min += 1 max -= 1 lines = ["civic", "A man, a plan, a canal: Panama.", "A Toyota. Race fast, safe car. A Toyota.", "Cigar? Toss it in a can. It is so tragic.", "Dammit, I'm mad!", "Delia saw I was ailed.", "Desserts, I stressed!", "Draw, O coward!", "Lepers repel.", "Live not on evil.", "Lonely Tylenol.", "Murder for a jar of red rum.", "Never odd or even.", "No lemon, no melon.", "Senile felines.", "So many dynamos!", "Step on no pets.", "Was it a car or a cat I saw?", "Dot Net Perls is not a palindrome.", "Why are you reading this?", "This article is not useful."] # Use to translate punctuation to spaces. # ... Changes uppercase to lowercase. dict = str.maketrans(",:.'!?ABCDEFGHIJKLMNOPQRSTUVWXYZ", " abcdefghijklmnopqrstuvwxyz") for line in lines: # Change all punctuation to spaces. line = line.translate(dict) # Remove all spaces. line = line.replace(" ", "") # See if line is a palindrome. if is_palindrome(line): print("Palindrome: ", line) else: print("Not palindrome:", line) Output Palindrome: civic Palindrome: amanaplanacanalpanama Palindrome: atoyotaracefastsafecaratoyota Palindrome: cigartossitinacanitissotragic Palindrome: dammitimmad Palindrome: deliasawiwasailed Palindrome: dessertsistressed Palindrome: drawocoward Palindrome: lepersrepel Palindrome: livenotonevil Palindrome: lonelytylenol Palindrome: murderforajarofredrum Palindrome: neveroddoreven Palindrome: nolemonnomelon Palindrome: senilefelines Palindrome: somanydynamos Palindrome: steponnopets Palindrome: wasitacaroracatisaw Not palindrome: dotnetperlsisnotapalindrome Not palindrome: whyareyoureadingthis Not palindrome: thisarticleisnotuseful
To detect palindromes, we scan the start and end of a string, progressing towards the center. It is possible (and possibly faster) to avoid preprocessing strings. We could modify is_palindrome to ignore non-letter characters.
A summary. We combined several Python methods, including maketrans, translate and the replace() method. Detecting palindromes is not that useful. But it helps us understand Python better. And that is useful.TranslateReplace
Dot Net Perls
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to