0

是否可以将我编写的这个程序变成一个忽略大小写差异、空格和非英文字母的递归函数?例如,程序必须能够将“True”返回到以下字符串,忽略大写“R”和句点“Rats live on no evil star.”。没有导入,只有一个函数,唯一可以使用的方法是 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()
4

3 回答 3

1

首先预处理你的字符串,只保留字母作为小写和空格。

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
于 2018-02-17T23:43:16.613 回答
0

由于ord()andlen()是函数,而不是 的方法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."))
于 2018-02-18T08:06:38.947 回答
-1

> 对于非字母字符(数字除外) 假设 s 是您的字符串。

from string import punctuation
St=(s.strip(punctuation))
于 2018-03-04T17:38:52.417 回答