单回文递归函数

问题描述 投票:0回答:3

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

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."))

-1
投票

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

from string import punctuation
St=(s.strip(punctuation))
© www.soinside.com 2019 - 2024. All rights reserved.