Трудности с пониманием списка в Python - PullRequest
0 голосов
/ 27 ноября 2018

Для онлайн-курса я хочу создать функцию censor, которая принимает в качестве входных данных две строки (текст и слово) и возвращает текст с выбранным словом, замененным звездочками.Пример:

censor("this hack is wack hack", "hack")

должен возвращать:

"this **** is wack ****"

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

def censor(text, word):
    words = text.split()
    result = ''
    censored = '*' * len(word)
    [censored if i == word else i for i in words]
    result =' '.join(words)
    return result

print censor("this hack is wack hack", "hack")

Однако функция печати внизу просто выводит 'this hack is wack hack'

Чего мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Просто работай задом наперед.Вы возвращаете результат.результат '' .join (слова).А что такое слова?слова это слова = текст.сплит ().Вы в основном игнорируете другие строки.

def censor(text, word):
    return ' '.join(['*' * len(word) if x == word else x for x in text.split()])

print(censor("this hack is wack hack", "hack"))
0 голосов
/ 27 ноября 2018

Во-первых, оператор возврата находится вне тела функции.

Во-вторых, вам нужно сохранить результат понимания списка в некоторой переменной.

Ниже будет работать код:

def censor(text, word):
    words = text.split()
    result = ''
    censored = '*' * len(word)
    result=[censored if i == word else i for i in words]
    return ' '.join(result)

print(censor("this hack is wack hack", "hack"))
this **** is wack ****
0 голосов
/ 27 ноября 2018

Здесь

[censored if i == word else i for i in words]

вы создаете цензурированный список слов, но вы не сохраняете к нему никаких ссылок.

Возможно, вы намеревались присвоить этот список обратно words variable

words = [censored if i == word else i for i in words]

, поскольку вы продолжаете использовать эту переменную для генерации возвращаемого значения.

...