我如何检查单词或句子是否是回文?

时间:2016-11-15 21:23:57

标签: python

我应该检查一个单词或句子是否是使用代码的回文,我能够检查单词,但我无法将句子检查为回文。这是我的代码,它很简短,但我不知道如何添加它来检查句子回文。我是python的初学者,我已经看过其他人的代码,而且对我来说太复杂了真的理解。这是我写的:

def is_palindrome(s):
  if s[::1] == s[::-1]:
    return True
  else:
    return False

这是一个句子回文的例子:“红玫瑰没有冒险,先生,护士订单。” (如果忽略空格和特殊字符)

8 个答案:

答案 0 :(得分:8)

import string

def is_palindrome(s):
    whitelist = set(string.ascii_lowercase)
    s = s.lower()
    s = ''.join([char for char in s if char in whitelist])
    return s == s[::-1]

答案 1 :(得分:3)

要检查句子回文,算法似乎是:

  1. 删除所有非字母字符
  2. 比较new_snew_s[::-1]不区分大小写。
  3. 您可以通过以下方式完成前者:

    import string
    
    valid = set(string.ascii_letters)
    result_s = ''.join([ch for ch in original_s if ch in valid])
    

    然后是后者:

    result_s.casefold() == result_s.casefold()[::-1]
    

    把整个事情放在一起:

    import string
    
    s = "Red roses run no risk, sir, on nurses order"
    s2 = "abcba"
    s_fail = "blah"
    
    def is_palindrome(s):
        valid = set(string.ascii_letters)
        result_s = ''.join([ch for ch in s if ch in valid])
        cf_s = result_s.casefold()
        return cf_s == cf_s[::-1]
    
    assert(is_palindrome(s))
    assert(is_palindrome(s2))
    assert(is_palindrome(s_fail))  # throws AssertionError
    

答案 2 :(得分:2)

您可以过滤字符串以仅获取如下字母:

letters = ''.join(c for c in words if c in string.letters)
is_palindrome(letters)

您还必须致电lower

def is_palindrome(s):
    s = ''.join(c for c in s if c in string.letters)
    s = s.lower()
    return s == s[::-1]

答案 3 :(得分:0)

根据标题,句子可以用两种方式称为回文:

  1. 应翻译单词顺序:创建单词列表并检查反转列表:

    >>> my_sentence = 'Hello World Hello'
    >>> words = my_sentence.split()
    >>> words == words[::-1]
    True
    
  2. 字符顺序应反转:检查反转的字符串:

    >>> my_sentence = 'Hello World Hello'
    >>> my_sentence == my_sentence[::-1]
    False 
    
  3. 你想要的是方式2,但你的代码应该丢弃逗号,和空格。它也应该不区分大小写。首先使用str.replace()删除空格和逗号,然后使用str.lower()将字符串转换为较低位置。然后将反转检查作为:

    >>> my_sentence = 'Red Roses run no risk, sir, on nurses order'
    >>> my_sentence = my_sentence.replace(' ', '').replace(',', '').lower()
    >>> my_sentence == my_sentence[::-1]
    True
    

答案 4 :(得分:0)

如果通过回文判断你的意思是忽略空格,你可以这样做:

is_palindrome(sentence.replace(' ', ''))

答案 5 :(得分:0)

不适用:

word_pilandrom = str(input("Please enter a word: "))
    new_word=word_pilandrom.lower().replace(" ","")
    if new_word[::1] == new_word[::-1]:
        print("OK")
    else:
        print("NOT")

答案 6 :(得分:0)

str =input("Enter the word")
s =str.lower()
s1 =s.split(" ")
s2 =s1.join()
s3 =''.join(reversed(s2))
if s2 ==s3 :
   print("Palindrome:")
else :
  print("Not Palindrome:")

答案 7 :(得分:0)

我们需要检查一个字符串的反转是否等于原始字符串,并有两个额外的要求:

  • 忽略大小写
  • 忽略除字母以外的任何内容

解决办法是:

  1. 将所有字母转换为相同的大小写(例如小写)
  2. 仅过滤字母
  3. 检查回文条件
    def is_palindrome(s):
        s_lower = s.lower()
        letters = [ch for ch in s_lower if ch.isalpha()]
        return letters == letters[::-1]