检查Palindrome文本,忽略标点符号,空格和大小写

时间:2015-06-01 04:11:27

标签: python python-3.x

家庭作业: 检查文本是否是回文也应该忽略标点符号,空格和大小写。例如,“升起投票,先生。”也是一个回文,但我们目前的计划并没有说它。你能改进上述程序以识别这个回文吗?

原始代码:

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")

我的尝试:

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")

错误:

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

我应该如何更改我的代码?

最新代码:

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")

无论我输入什么,输出都是。

Enter text: hggjkgkkkk
Yes, it is a palindrome

怎么了?

3 个答案:

答案 0 :(得分:3)

要忽略给定文本的标点符号,空格和大小写,您需要定义一个函数remove_punctuations(),它将一个单词作为参数并返回一个包含所有小写字符的单词,删除标点符号和删除的空格。 / p>

要删除我们需要迭代给定文本的不需要的字符,如果当前字符位于strings.ascii_letters,则生成使用str.lower()方法将其转换为低级字符的字符。最后使用"".join()方法连接生成的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")

答案 1 :(得分:1)

我在两天前开始学习python,所以我想到了这一点。 它不是那么先进,但就像一个魅力。 :D 我在那里做什么很简单。我只是用“合法”字母(abc =)组成一个元组。然后定义一个函数,该函数首先将所有字母更改为小写,然后检查字符串中具有“合法”字母的每个字符。然后在“过滤”之后,原始文本仅包含“合法”文本。然后,第二个函数只反转第一个函数的结果。比较,然后da ..!

# Palindrome recognize
abc='abcdefghijklmnopqrstuvwxyz'
def rawtext(text):
    rawtext=''
    text=text.lower()
    for j in text[::1]:
        for i in abc[::1]:        
            if j==i:                
                rawtext=rawtext+j
    return rawtext

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

text=str(input('Write  text:'))

if reverse(text)==rawtext:
    print('The text is palindrome')
else:
    print('The text is not a palindrome')

答案 2 :(得分:0)

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

希望有所帮助