Проверка правильности понимания списка строчных букв Python, когда это кажется правильным? - PullRequest
0 голосов
/ 08 сентября 2018

Я делаю курс по 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) 

Так что мне разрешено писать код только в функции, которая меняет строки на строчные(Я могу написать код под строкой документа, но я не могу ничего изменить, например удалить эти три строки тестового кода).Поскольку их тест объявляет строки и вызывает функцию из моего кода, он просто перезаписывает все, что я пишу!Я чувствую, что схожу с ума, потому что это вопрос новичка, и я не могу его сдать.Что я делаю не так?Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

Вам нужно только незначительное изменение: измените список на месте, используя назначение срезов, а не создавая новый список. Тогда вам не нужно возвращать его (фактически соглашение Python состоит в том, чтобы этого не делать).

def lowercase(strings):
    """takes a list of strings and replaces each with lowercase version"""
    strings[:] = (x.lower() for x in strings)
0 голосов
/ 23 ноября 2018

С тем же кодом понимания списка попробуйте этот

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

print(strings)
0 голосов
/ 08 сентября 2018

Ваша проблема в том, что ваша функция делает копию strings внутри нее и возвращает копию. Вместо этого вы хотите изменить список на месте.

Вот один из способов сделать это:

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 и измените каждый элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...