Palindrome. A palindrome reads the same forwards and backwards. Some common words, like "level" are palindromes. But some entire sentences are also palindromes.
Method info. We can check palindromes in Python with a simple method. We can loop over a string, checking its ends, and moving inward, on each iteration.
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.
And If both halves of the string have equal characters, we have a palindrome.
Info In the lines list, we specify an assortment of known palindromes (like "civic"). Punctuation and whitespace is included.
Next With maketrans, we create a dictionary to replace all punctuation with spaces. It also lowercases letters.
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.
reduced = line.translate(dict)
# Remove all spaces.
reduced = reduced.replace(" ", "")
# See if line is a palindrome.
if is_palindrome(reduced):
print("Palindrome: ", line)
else:
print("Not palindrome:", line)Palindrome: civic
Palindrome: A man, a plan, a canal: Panama.
Palindrome: A Toyota. Race fast, safe car. A Toyota.
Palindrome: Cigar? Toss it in a can. It is so tragic.
Palindrome: Dammit, I'm mad!
Palindrome: Delia saw I was ailed.
Palindrome: Desserts, I stressed!
Palindrome: Draw, O coward!
Palindrome: Lepers repel.
Palindrome: Live not on evil.
Palindrome: Lonely Tylenol.
Palindrome: Murder for a jar of red rum.
Palindrome: Never odd or even.
Palindrome: No lemon, no melon.
Palindrome: Senile felines.
Palindrome: So many dynamos!
Palindrome: Step on no pets.
Palindrome: Was it a car or a cat I saw?
Not palindrome: Dot Net Perls is not a palindrome.
Not palindrome: Why are you reading this?
Not palindrome: This article is not useful.
Performance note. It is possible (and likely faster) to avoid preprocessing strings. We could modify is_palindrome to ignore non-letter characters.
We combined several Python methods, including maketrans, translate and the replace() method. Writing palindrome code helps us understand Python better.
Dot Net Perls is a collection of pages with code examples, which are updated to stay current. Programming is an art, and it can be learned from examples.
Donate to this site to help offset the costs of running the server. Sites like this will cease to exist if there is no financial support for them.
Sam Allen is passionate about computer languages, and he maintains 100% of the material available on this website. He hopes it makes the world a nicer place.