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 就地修改它们。如果您查找交互式 help
或 online 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 True
或 return False
——这将在您测试第一个单词后立即退出该函数,这意味着其余的单词永远不会被测试。我不确定你是否想要 return True
如果有 any pallidromes,或者如果它们是 all 回文,或者如果你想 return 一个布尔值列表而不是一个,或者什么,但你不能只 return 第一个。
如果您使用更好的名称可能会更清楚,例如 words
代替 x
和 word
代替 string
。
无论如何,我无法告诉您修复此问题的正确方法,因为我不知道您要做什么,但希望这足以说明您可以自己修复它。
放弃解决方案违背了练习的目的
你的方法或多或少是正确的。
将字符串转换为标准大小写
删除空格
检查字符串的反转是否等于原始字符串
错误在于您如何使用 python API。
检查每个函数的作用,以及它们的作用 return。
一个好主意是 运行 help(function)
查看该函数的文档对此有何评论。
尝试help(x.lower)
(注意:不是help(x.lower())
)并查看return值是多少。
我在 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 就地修改它们。如果您查找交互式 help
或 online 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 True
或 return False
——这将在您测试第一个单词后立即退出该函数,这意味着其余的单词永远不会被测试。我不确定你是否想要 return True
如果有 any pallidromes,或者如果它们是 all 回文,或者如果你想 return 一个布尔值列表而不是一个,或者什么,但你不能只 return 第一个。
如果您使用更好的名称可能会更清楚,例如 words
代替 x
和 word
代替 string
。
无论如何,我无法告诉您修复此问题的正确方法,因为我不知道您要做什么,但希望这足以说明您可以自己修复它。
放弃解决方案违背了练习的目的
你的方法或多或少是正确的。
将字符串转换为标准大小写
删除空格
检查字符串的反转是否等于原始字符串
错误在于您如何使用 python API。
检查每个函数的作用,以及它们的作用 return。
一个好主意是 运行 help(function)
查看该函数的文档对此有何评论。
尝试help(x.lower)
(注意:不是help(x.lower())
)并查看return值是多少。