如何解决如何在不破坏输出或出现错误的情况下从我的代码中删除多个返回?
我的代码有多个返回值,我希望它有一个返回值,但是每当我尝试将它更改为一个返回值时,它都会破坏我的代码,并且不会按照我想要的方式升级。
我的代码:
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 举报,一经查实,本站将立刻删除。