我在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
答案 0 :(得分:3)
您的代码中实际上有两个独立的问题-您很正确,其中一个问题是lower
,另一个是返回流。
首先,x.lower()
不会就地修改x
。实际上,字符串是不可变的。 没什么修改它们。如果您查找交互式help
或online 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 True
或return False
-一旦测试了第一个单词,它们将立即退出功能,这意味着其余单词将永远不会得到测试。我不确定是否要返回True
,如果有任何回文,或者是否是所有回文,或者是否要返回布尔值列表,而不是单个布尔值列表或其他内容,但是您不能只返回第一个布尔值。
如果您使用更好的名称,例如words
而不是x
和word
而不是string
,可能会更清楚。
无论如何,由于我不知道您要执行的操作,因此我无法告诉您正确的解决方法,但希望这足以说明您可以自己解决此问题。
答案 1 :(得分:0)
放弃解决方案将破坏练习的目的
您的方法或多或少是正确的。
将字符串转换为标准大小写
删除空格
检查字符串的反向是否等于原始字符串
错误在于您如何使用python API。
检查每个函数的作用以及它们返回什么。
一个好主意是运行help(function)
来查看该函数的文档对此有何评论。
尝试help(x.lower)
(注意:不要help(x.lower())
),然后看看返回值是什么。