gpt4 book ai didi

python - 为什么我的用于检查回文的 python 算法不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:02 24 4
gpt4 key购买 nike

所以我在做 exercise 6 from chapter 7 from Think Python令我感到奇怪的是,我作为解决方案编写的这段代码不起作用:

def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
is_palindrome(middle(word))
else:
return False

它没有进入任何递归,我不知道为什么。对于长度超过 1 个字符的单词,它返回 None。为什么是这样?当单词的长度达到 1 或更少时,它应该返回 True!为什么它不起作用?

PS:这里是first,last和middle definitions:

def first(word):
return word[0]

def last(word):
return word[-1]

def middle(word):
return word[1:-1]

最佳答案

您缺少一个 return :

def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
return is_palindrome(middle(word)) # <--
else:
return False

因此您当前的代码段返回 None一旦elif block 被输入,因为那里没有显式的 return 语句。换句话说,您确实计算了is_palindrome(middle(word)) ,但您对结果什么都不做。

也许完成一个简单的示例会有所帮助。考虑使用参数 'aba' 调用原始 函数:

  • 函数调用
  • word现在是'aba'
  • len(word) <= 1False , if -正文未输入。
  • first(word) == last(word)True , elif -正文输入:
    • 函数递归调用:
    • word现在是'b'
    • len(word) <= 1True , if -正文输入:
      • True返回
  • 丢弃递归调用的返回值(因为 return 中没有 elif)
  • None返回

关于python - 为什么我的用于检查回文的 python 算法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com