Python Forum

Full Version: Need to improve a programm
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
The program checks if the input text is palindrome. After checking a text like "Rise to vote, sir." it wont find it as palindrome, even if it is. I need to improve a program so that it could ignore punctuation, spaces,case etc. I should specify a tuple "forbidden", where i place such characters, and use the membreship test to determine whether a character should be removed or not.
All my attempts of improving the program using that way crushed with different types of errors. Help me if u can, please.

Here is the initial version of the program
def reverse(text):
    return text[::-1]

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

something = (input('Input something --> '))

if (is_palindrome(something)):
    print('The text is polyndrom')
else:
    print('The text is not polyndrom')
First of all, you would use the lower method (text.lower()) to remove the problem of lower case letters not matching uppercase letters.

For the rest you don't really need a tuple, you could use a string. But if your teach says use a tuple, use a tuple. Note you could easily define it with a string: forbidden = tuple(' ,.!?')

There's two ways you can do it. First, you can use a for loop to loop through the characters in forbidden, and use the replace method them with nothing in the text (text = text.replace(char, '')). Second you could start with an empty string, loop through the characters in text, and add them to the the empty string if char not in forbidden:.
(Mar-16-2019, 03:25 PM)ichabod801 Wrote: [ -> ]First of all, you would use the lower method (text.lower()) to remove the problem of lower case letters not matching uppercase letters. For the rest you don't really need a tuple, you could use a string. But if your teach says use a tuple, use a tuple. Note you could easily define it with a string: forbidden = tuple(' ,.!?') There's two ways you can do it. First, you can use a for loop to loop through the characters in forbidden, and use the replace method them with nothing in the text (text = text.replace(char, '')). Second you could start with an empty string, loop through the characters in text, and add them to the the empty string if char not in forbidden:.

I have got your pont, please, check it out what i have now. I guess i did something wrong, cuz it replaces just one character and skips others.
def reverse(text):
    return text[::-1]
def is_palindrome(text):
    forbidden = (",",".",' ')
    for i in forbidden:
        if i in a:
            b = a.replace(i,'')
        
    return text == reverse(b)

something = (input('Input something --> '))
a = something.lower()
print(a)
if (is_palindrome(a)):
    print('The text is polyndrom')
else:
    print('The text is not polyndrom')
In your is_palindrome function, you should use the text parameter you passed to the function, and you need to save the replacements back into that, to keep the changes:

    for i in forbidden:
        if i in text:
            text = text.replace(i,'')
    return text == reverse(text)
(Mar-16-2019, 09:19 PM)ichabod801 Wrote: [ -> ]In your is_palindrome function, you should use the text parameter you passed to the function, and you need to save the replacements back into that, to keep the changes:
 for i in forbidden: if i in text: text = text.replace(i,'') return text == reverse(text) 
Got the point, i have understood my mistake, now. Thanks you for helping