Простая цензорная функция не работает в python - PullRequest
0 голосов
/ 30 мая 2020

Я создал функцию, которая подвергает цензуре текст и слово. Он должен вернуть текст, но с замененным словом цензора на ****. Но это слово не подвергается цензуре.

def censor(text,word):
  if word in text:
    word="*"*len(word)
  return text

Что не так с кодом?

Ответы [ 4 ]

2 голосов
/ 30 мая 2020

Вы не вносите никаких изменений в строку «текст». Приведенный ниже пример кода должен дать вам желаемый результат.

def censor(text,word):
  if word in text:
    text= text.replace(word,"*"*len(word))
  return text

1 голос
/ 30 мая 2020

Это решение без метода replace(), если вы хотите что-то подобное:

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

Вам нужно разбить текст на слова, тогда вам нужно перебрать эти слова, и если вы найти данное слово, нужно заменить его на censor_block. Наконец, вам нужно объединить список слов в текст и вернуть его. С a for l oop вам нужно использовать индексы, потому что строка неизменяема. Вместо этого я использовал понимание списка.

Вместо text_word и censor_block вы можете использовать функции для обработки более сложных задач.

[f(x) if condition else g(x) for x in sequence]
[f(x) for x in sequence if condition]
[f(x) for x in sequence]

Они будут работать .

Надеюсь, это поможет :)

1 голос
/ 30 мая 2020

Вам нужно заменить значение в исходном тексте, изменение переменной итерации не даст никакого эффекта, попробуйте следующее:

def censor(text, word):
    return text.replace(word, '*' * len(word))

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

1 голос
/ 30 мая 2020

Не влияет на text переменную. Вам следует заменить свой код на

def censor(text,word):
  return text.replace(word, "*" * len(word)) # -> it will replace word to * if word in text else it will do nothing
...