是否可以将我编写的程序转换为单个递归函数,忽略大小写,空格和非英文字母?例如,程序必须能够返回" True"到下面的字符串,忽略大写" R"和时期。"老鼠生活在没有邪恶的星球上。"。没有导入,只有一个函数,唯一可以使用的方法是isalpha()。
def main() :
inputStr = input("Enter a string: ")
if isPalindrome(inputStr) :
print("That's a palindrome.")
else:
print("That isn't a palindrome.")
def isPalindrome(string) :
if len(string) <= 1 :
return True
if string[0].lower() == string[len(string) - 1].lower() :
return isPalindrome(string[1:len(string) - 1])
else :
return False
main()
答案 0 :(得分:1)
首先预处理你的字符串,只保留alphas作为小写和空格。
string = "".join(char.lower() for char in string if char.isalpha())
如果您首先执行此操作,则您的功能适用于我,并在您的输入时返回True
。
最终功能:
def is_palindrome(string) :
string = "".join(char.lower() for char in string if char.isalpha())
if len(string) <= 1 :
return True
if string[0] == string[-1]:
return is_palindrome(string[1:-1])
else :
return False
现在
>>> is_palindrome("Rats live on no evil star.")
True
答案 1 :(得分:0)
由于ord()
和len()
是函数,而不是str
的方法,所以这应该可以解决问题:
def isPalindrome(string):
a, b = 0, len(string)
if b <= 1:
return True
while not string[0].isalpha():
a += 1
if len(string[a:b]) <= 1:
return True
while not string[b - 1].isalpha():
b -= 1
if len(string[a:b]) <= 1:
return True
if (ord(string[a]) - ord(string[b - 1])) % 32 == 0:
return isPalindrome(string[a + 1:b - 1])
return False
print(isPalindrome("Rats live on no evil star."))
print(isPalindrome("rats live on no evil star."))
print(isPalindrome("rats live on no evil star"))
print(isPalindrome("Madam, I'm Adam."))
答案 2 :(得分:-1)
<强>&GT;对于非字母字符(数字除外) 假设s是你的字符串。
from string import punctuation
St=(s.strip(punctuation))