Palindrome text validation with ignored punctuation marks, spaces and case

Homework: Checking if the text is a palindrome, also ignore punctuation marks, spaces and case. For example, "Please come up, sir." is also a palindrome, but our current program does not say it is. Can you improve the above program to recognize this palindrome?

source:

def reverse(text):
    return text[::-1]
def is_palindrome(text):
    return text == reverse(text)

something = input('Enter text: ') 

if (is_palindrome(something)):
    print("Yes, it is a palindrome") 
else:
    print("No, it is not a palindrome")

      

my attempt:

import re

def reverse(text):
    global words
    words = text.split()
    return words[::-1]

def is_palindrome(text):
    return words==reverse(text)

something = input('Enter text: ')
if (is_palindrome(something)):
    print("Yes, it is a palindrome")
else:
    print("No, it is not a palindrome")

      

Mistake:

Enter text: jfldj
Traceback (most recent call last):
File "/Users/apple/PycharmProjects/Problem Solving/user_input.py", line 13, in <module>
print("Yes, it is a palindrome")
File "/Users/apple/PycharmProjects/Problem Solving/user_input.py", line 10, in is_palindrome

NameError: name 'words' is not defined

      

How can I change the code?

Last code:

import string

def remove_punctuations(word):
    return "".join(i.lower() for i in word if i not in string.ascii_letters)

def reverse(text):
    return text[::-1]

def is_palindrome(text):
    text = remove_punctuations(text)
    return text == reverse(text)

something = input('Enter text: ')
if (is_palindrome(something)):
    print("Yes, it is a palindrome"
else:
    print("No, it is not a palindrome")

      

Whatever I input, the output is: Yes.

Enter text: hggjkgkkkk
Yes, it is a palindrome

      

What's wrong?

+3


source to share


2 answers


To ignore punctuation, spaces, and the case of a given text, you need to define a function remove_punctuations()

that takes a word as a parameter and returns a word with all lowercase characters, removes punctuation marks and removed spaces.

To remove unnecessary characters, we need to iterate over the given text if the current character falls into strings.ascii_letters

, then generate a character converting it to bottom caps using the method str.lower()

. Finally, using a method "".join()

to concatenate the generated items str

.



import string

def remove_punctuations(word):
    return "".join(i.lower() for i in word if i in string.ascii_letters)

def reverse(text):
    return text[::-1]

def is_palindrome(text):
    text = remove_punctuations(text)
    return text==reverse(text)

something = "Rise to vote, sir."

if (is_palindrome(something)):
    print("Yes, it is a palindrome")
else:
    print("No, it is not a palindrome")

      

+3


source


from itertools import izip_longest

def is_palindrome(s):
    l = len(s)
    fi = (i for i in xrange(l) if s[i].isalpha())
    bi = (i for i in xrange(l-1, -1, -1) if s[i].isalpha())
    for f, b in izip_longest(fi, bi):
        if f >= b: return True
        if s[f].lower() != s[b].lower(): return False
    return True

      



Hope it helps

0


source







All Articles