微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不破坏输出或出现错误的情况下从我的代码中删除多个返回?

如何解决如何在不破坏输出或出现错误的情况下从我的代码中删除多个返回?

如何在不破坏输出或出错的情况下从我的代码删除多次返回?

我的代码有多个返回值,我希望它有一个返回值,但是每当我尝试将它更改为一个返回值时,它都会破坏我的代码,并且不会按照我想要的方式升级

我的代码

def is_palindrome(s):
    """
    -------------------------------------------------------
    Recursively determines if s is a palindrome. Ignores non-letters and case.
    Use: palindrome = is_palindrome(s)
    -------------------------------------------------------
    Parameters:
        s - a string (str)
    Returns:
        palindrome - True if s is a palindrome,False otherwise (boolean)
    -------------------------------------------------------
    """
    if len(s) <= 1:
        return True
    else:
        if not s[0].isalpha():
            return is_palindrome(s[1:])
        elif not s[-1].isalpha():
            return is_palindrome(s[:-1])
        if s[0].lower() != s[len(s) - 1].lower():
            return False
        else:
            return is_palindrome(s[1:-1])

解决方法

如果我们想要“一点退出”(返回),我们可以将结果保存到一个变量中并在最后返回:

def is_palindrome(s):
    """
    -------------------------------------------------------
    Recursively determines if s is a palindrome. Ignores non-letters and case.
    Use: palindrome = is_palindrome(s)
    -------------------------------------------------------
    Parameters:
        s - a string (str)
    Returns:
        palindrome - True if s is a palindrome,False otherwise (boolean)
    -------------------------------------------------------
    """
    if len(s) <= 1:
        res = True
    else:
        if not s[0].isalpha():
            res = is_palindrome(s[1:])
        elif not s[-1].isalpha():
            res = is_palindrome(s[:-1])
        elif s[0].lower() != s[len(s) - 1].lower():
            res = False
        else:
            res = is_palindrome(s[1:-1])
    return res

请注意,第二个 if 已修改为 elif - 这不会改变执行流程!

,

只需在所有条件语句中分配一个变量,然后返回即可。您还需要将第二个 if 更改为 elif 以在前一条语句确实执行时不执行:

def is_palindrome(s):
    """
    -------------------------------------------------------
    Recursively determines if s is a palindrome. Ignores non-letters and case.
    Use: palindrome = is_palindrome(s)
    -------------------------------------------------------
    Parameters:
        s - a string (str)
    Returns:
        palindrome - True if s is a palindrome,False otherwise (boolean)
    -------------------------------------------------------
    """
    if len(s) <= 1:
        out = True
    else:
        if not s[0].isalpha():
            out = is_palindrome(s[1:])
        elif not s[-1].isalpha():
            out = is_palindrome(s[:-1])
        elif s[0].lower() != s[len(s) - 1].lower():
            out = False
        else:
            out = is_palindrome(s[1:-1])
    return out
,

您可以将逻辑简化为单个长条件,这(尽管是多行)在某些方面更具可读性,从而使逻辑非常清晰:

def is_palindrome(s):
    return (len(s) <= 1
            or (not s[0].isalpha() and is_palindrome(s[1:])) 
            or (not s[-1].isalpha() and is_palindrome(s[:-1]))
            or (s[0].lower() == s[-1].lower() and is_palindrome(s[1:-1])))

由于 short-circuiting,这与您的原始代码一样有效 - 条件仅在需要评估时进行评估。

如果你先去掉非字母字符的字符串,那么递归部分可以变得非常简单:

def is_palindrome(s):
    """ Determines if string s is a palindrome,ignoring non-alphabetic characters
        and ignoring case """
    return is_palindrome_general([c for c in s.lower() if c.isalpha()])

def is_palindrome_general(s):
    """ Determines if sequence s is a palindrome,treating all types of
        item the same """
    return len(s) <= 1 or (s[0] == s[-1] and is_palindrome_general(s[1:-1]))

(我把它分成 2 个函数只是为了避免不必要的重复去掉非字母字符的部分。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?