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:
a = value[min]
b = value[max]
# Return false is characters are not equal.
if a != b:
# 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!",
"Live not on evil.",
"Murder for a jar of red rum.",
"Never odd or even.",
"No lemon, no melon.",
"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",
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.
print("Palindrome: ", line)
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.
A performance note. It is possible (and likely 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. Writing palindrome code helps us understand Python better.