python - 使用递归来确定一个词是否是回文
问题描述
我正在尝试确定给定单词是否是回文。
我的代码的目标是该函数将接受一个单词,并删除它的任何标点符号或空格。如果单词的长度为 0 或 1,则返回该单词是回文。然后我检查第一个和最后一个字母是否相同。如果不是,则返回它不是回文。如果它们的第一个和最后一个字母相同,那么我想用空格替换这两个字母并再次调用我的函数。我用空格替换字母的原因是它会被我最初的编辑语句编辑。
def palindrome(word):
editWord = word.strip(" ").strip("!").strip("?")
stringOne = "A palindrome"
stringTwo = "Not a palindrome"
if len(editWord) == 0 or len(editWord) == 1:
return stringOne
elif editWord[0] != editWord[-1]:
return stringTwo
else:
word = editWord.replace(editWord[0], " ").replace(editWord[-1], " ")
palindrome(word)
return stringOne
print(palindrome("area"))
当用单个字母进行测试时,它可以正常工作,如果我测试像“are”这样显然不是回文的单词。但是,如果我将单词 area 称为“A palindrome”,则它不是。这使它看起来好像没有再次调用我的函数。关于为什么会发生这种情况的任何建议?
解决方案
为了使递归在此处正常工作,您的 else 语句应该说“如果外部字符相等且其余字符也是回文,则该单词是回文”。相反,您的代码将所有出现的外部字符替换为空格,检查该单词是否为回文,并忽略结果以始终返回“是”。
您可以使用切片而不是替换进行适当的递归:
else:
return palindrome(editWord[1:-1])
推荐阅读
- python - 在python中访问超级(父)类变量
- asp.net-mvc - MVC 实体框架中的 Oracle TTC 错误
- java - 使用 processBuilder 打开 git bash 并在其中执行命令
- r - 使用 dplyr 的 case_when 函数与两个数据集之间的连接
- python - Keras CNN-LSTM 运行时错误
- java - G1 gc 可疑的长时间停顿
- sql - 动态地将行溢出到多个逗号分隔的列表中
- sql-server - SQL SERVER:日期格式 DDMMYYYY
- c# - 在不使用 windows 窗体的情况下打印带有 sql 数据的格式化文档
- wordpress - how to start the loop from the second post in blog page in wordpress