Python 小写列表理解测试似乎是正确的?

Python lowercase list comprehension failing tests when it seems to be right?

我正在上一门 Python 课程,其中涉及完成大量在线问题,任务看起来非常简单(获取一个字符串列表并将其转换为小写)。但是,无论我尝试什么,我的代码都会失败。我试过列表理解和循环,但无济于事——它只是说测试失败。 这是下面的代码:

def lowercase(strings):
    """takes a list strings and replaces string with lowercase words"""
    strings = [x.lower() for x in strings]
    return strings   

strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings) 

我提供的零件是:

def lowercase(strings):
    """takes a list strings and replaces string with lowercase words"""


strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings) 

所以我只允许在将 'strings' 更改为小写的函数中编写代码(我可以在文档字符串下编写代码,但我不能修改任何其他内容,例如删除这三行测试代码)。因为他们的测试在我的代码下声明了字符串并调用了函数,所以它似乎只是覆盖了我写的任何东西!我觉得我快疯了,因为这是一个初学者问题,我无法通过测试。我做错了什么?谢谢!

您的问题是您的函数在其中复制了 strings,并在其中复制了 returns。相反,您想就地修改列表。

这是您可以做到的一种方法:

def lowercase(strings):
    """takes a list strings and replaces string with lowercase words"""
    for i, x in enumerate(strings):
        strings[i] = x.lower()

strings = ['LOWER', 'CASE', 'SENTENCE']
lowercase(strings)
print(strings)
#['lower', 'case', 'sentence']

而不是列表理解(创建一个新列表),迭代 strings 的索引并修改每个元素。

您只需要一个小改动:使用切片赋值就地修改列表,而不是创建新列表。然后你就不需要 return 它了(事实上,Python 约定是不要这样做)。

def lowercase(strings):
    """takes a list of strings and replaces each with lowercase version"""
    strings[:] = (x.lower() for x in strings)

使用相同的列表理解代码试试这个

strings = ['LOWER', 'CASE', 'SENTENCE']
strings = lowercase(strings)

print(strings)