python 中的回文函数有问题

Trouble with Palindrome function in python

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

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

您的代码中实际上有两个不同的问题 — 您是对的,其中一个与 lower 有关,另一个与 return 流程有关。


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

Return a copy of the string with all the cased characters [4] converted to lowercase.

因此,您需要对 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——这将在您测试第一个单词后立即退出该函数,这意味着其余的单词永远不会被测试。我不确定你是否想要 return True 如果有 any pallidromes,或者如果它们是 all 回文,或者如果你想 return 一个布尔值列表而不是一个,或者什么,但你不能只 return 第一个。

如果您使用更好的名称可能会更清楚,例如 words 代替 xword 代替 string

无论如何,我无法告诉您修复此问题的正确方法,因为我不知道您要做什么,但希望这足以说明您可以自己修复它。

放弃解决方案违背了练习的目的

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

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

  2. 删除空格

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

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

检查每个函数的作用,以及它们的作用 return。

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

尝试help(x.lower)(注意:不是help(x.lower()))并查看return值是多少。