2016-11-15 62 views
4

我应该检查一个单词或句子是否是使用代码的回文,并且我能够检查单词,但是我无法检查句子作为回文。这是我的代码,它很短,但我不知道如何添加它来检查句子palindromes。我在Python中是一个初学者,我已经看过别人的代码,而且他们对我来说太复杂了,真的明白了。这是我写的:如何检查单词或句子是否为回文?

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

这里是一个句回文的例子:“红玫瑰运行没有风险的,先生,护士秩序。” (如果你忽略空格和特殊字符)

+3

什么是句子回文?你的意思是我们忽略空格,把所有的字母看作一个大字? –

+0

这只会检查第一个和最后一个字符,而不检查其他任何字符。请发布您能够检查是否有回文字的代码 – inspectorG4dget

+0

是的,基本上就是这样。这里有一个例子:'红玫瑰没有风险,先生,护士订单。'我应该摆脱任何特殊字符和空格,以查看它是否是回文 – FireFume

回答

0

基于标题,句子可以通过2种方式称为回文:

  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 
    

你想要什么方式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 
+0

'is_palindrome(“红玫瑰没有风险,先生,护士订单”)== True'说在问题中的评论。 –

+0

根据评论更新了答案 –

0

如果回文一句你的意思是忽略空格,可以是这样做的:

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

例句有逗号。 –

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] 
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

要检查句回文的烦躁,算法似乎是:

  1. 删除所有非字母字符
  2. 比较new_snew_s[::-1]不区分大小写。通过做

    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 
相关问题