【问题标题】:Creating palindrome function that returns boolean values in Python在 Python 中创建返回布尔值的回文函数
【发布时间】:2017-09-08 00:20:35
【问题描述】:

我目前正在学习 Python 课程,目前正在努力完成我的一部分作业。

问题是要求我们构造一个函数来检查字符串是否为回文。我遇到的问题是,对于我的讲师提供的一项测试,是针对包含空格的回文“从不奇数或偶数”。空格导致我的函数失败,因为它不会只使用短语中的字母。

我当前的代码是:

def is_palindrome(phrase):

    return phrase == phrase[::-1]

她正在测试代码:

assert is_palindrome("Never odd or even")

任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 按原样,您的代码不关心大小写或空格。您是如何尝试计算这些的?
  • 去掉所有空格,将所有内容转换为相同大小写,然后进行测试。
  • 我不确定如何编辑我的代码来解决这个问题。我必须将字符串转换为列表吗?
  • 请参阅stackoverflow.com/questions/20991605/… 了解如何删除空格。请参阅stackoverflow.com/questions/6797984/… 了解如何转换为相同大小写。
  • 您不需要将字符串转换为列表。它已经是可迭代的(字符串实际上只是引擎盖下的字符数组)

标签: python


【解决方案1】:

我想这就是你想要的:-
is_palindrome("Never odd or even".replace(" ", "").lower())

或者

如果你想改变你的功能,那么你的功能看起来像:

def is_palindrome(phrase):
    phrase=phrase.replace(" ","").lower()
    return phrase == phrase[::-1]   

您可以使用is_palindrome("Never odd or even") 调用它

【讨论】:

    【解决方案2】:

    先去掉空格,再使用递归,只检查首尾字符是否相同,在内部递归。

    def is_palindrome(x):
        x = "".join(x.split()).lower()
        if (len(x) <= 1): return True
        if x[0] != x[-1]: return False
        return is_palindrome(x[1:-1])
    

    【讨论】:

    • 与简单地反转完整字符串相比,这不太可能更有效,因为您在每次递归调用时都有效地复制(创建新字符串对象)(x[1:-1] 是一个新字符串,它的内存不足)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2021-10-29
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多