单回文递归函数

时间:2018-02-17 23:31:47

标签: python recursion palindrome isalpha

是否可以将我编写的程序转换为单个递归函数,忽略大小写,空格和非英文字母?例如,程序必须能够返回" 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()

3 个答案:

答案 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))