我应该检查一个单词或句子是否是使用代码的回文,我能够检查单词,但我无法将句子检查为回文。这是我的代码,它很简短,但我不知道如何添加它来检查句子回文。我是python的初学者,我已经看过其他人的代码,而且对我来说太复杂了真的理解。这是我写的:
def is_palindrome(s):
if s[::1] == s[::-1]:
return True
else:
return False
这是一个句子回文的例子:“红玫瑰没有冒险,先生,护士订单。” (如果忽略空格和特殊字符)
答案 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)
要检查句子回文,算法似乎是:
new_s
与new_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
答案 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)
根据标题,句子可以用两种方式称为回文:
应翻译单词顺序:创建单词列表并检查反转列表:
>>> my_sentence = 'Hello World Hello'
>>> words = my_sentence.split()
>>> words == words[::-1]
True
字符顺序应反转:检查反转的字符串:
>>> 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
答案 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)
我们需要检查一个字符串的反转是否等于原始字符串,并有两个额外的要求:
解决办法是:
def is_palindrome(s):
s_lower = s.lower()
letters = [ch for ch in s_lower if ch.isalpha()]
return letters == letters[::-1]