python中的回文函数麻烦

时间:2018-06-26 02:58:33

标签: python palindrome

我在python的在线课程中遇到了麻烦,特别是回文问题These are the instructions,但是该函数必须不区分大小写并且不能看到空格。我认为问题出在我的回报块或流程中。我想我需要使用下标功能,但老实说我不确定。

def student_func(x):
    for string in x:
        x.lower()
        y = x.replace(" ", "")
        if y[::-1]==y:
            return True
        else:
            return False

2 个答案:

答案 0 :(得分:3)

您的代码中实际上有两个独立的问题-您很正确,其中一个问题是lower,另一个是返回流。


首先,x.lower()不会就地修改x。实际上,字符串是不可变的。 没什么修改它们。如果您查找交互式helponline docs,它会显示:

  

返回字符串的副本,并将所有大小写的字符[4]转换为小写。

因此,您需要对lower做与replace相同的事情:将结果分配给变量,然后使用该变量:

y = x.lower()
z = y.replace(" ", "")

或者您可以重复使用相同的变量:

x = x.lower()

…或将两个呼叫链接在一起:

y = x.lower().replace(" ", "")

请注意,除非您使用的是Python 2,否则应考虑是否要使用casefold而不是lower。对于英语来说,没有什么区别,但是对于其他语言来说,是没有区别的。


同时,您正在做for string in x:,但随后忽略了string

如果x仅是一个单词,那么您根本就不想遍历它。

如果x是单词列表,则for string in x:是正确的,但是您必须在循环内使用string,而不是x。另外,您不能只是return Truereturn False -一旦测试了第一个单词,它们将立即退出功能,这意味着其余单词将永远不会得到测试。我不确定是否要返回True,如果有任何回文,或者是否是所有回文,或者是否要返回布尔值列表,而不是单个布尔值列表或其他内容,但是您不能只返回第一个布尔值。

如果您使用更好的名称,例如words而不是xword而不是string,可能会更清楚。

无论如何,由于我不知道您要执行的操作,因此我无法告诉您正确的解决方法,但希望这足以说明您可以自己解决此问题。

答案 1 :(得分:0)

放弃解决方案将破坏练习的目的

您的方法或多或少是正确的。

  1. 将字符串转换为标准大小写

  2. 删除空格

  3. 检查字符串的反向是否等于原始字符串

错误在于您如何使用python API。

检查每个函数的作用以及它们返回什么。

一个好主意是运行help(function)来查看该函数的文档对此有何评论。

尝试help(x.lower)(注意:不要help(x.lower())),然后看看返回值是什么。