Если я сравниваю строку в списке со строковой переменной, проверяет ли она все символы в слове или само слово в списке

#python #if-statement #iteration #comparison

#python #if-statement #итерация #сравнение

Вопрос:

Я программист-новичок, использующий Python. В приведенном ниже примере приведена функция censor, которая принимает две строки, text и word, в качестве входных данных. Он должен возвращать текст с выбранным вами словом, замененным звездочками.

Так, например, если text =»привет и приветствие всем» и word =»всем», вывод должен быть:

«привет и приветствие ********»

 def censor(text, word):
    text = text.lower()
    text_to_list = text.split()
    for i in text_to_list:
        if i == word:
            text = text.replace(i, '*' * len(word))
    print(text)
  

Моя функция выше выглядит так, как будто она выполняет свою работу, но когда я устанавливаю:
text=»joey is a buggie bug» и word =»ошибка», ошибка в текстовой строке также получает звездочку. Может кто-нибудь сказать мне, чего мне не хватает, или это неправильный тип сравнения. Я попытался проверить тип как для ‘i’, так и для ‘word’, и они оба дают мне «class string». Любая помощь будет отличной.

Комментарии:

1. вы могли бы использовать str.replace здесь text.replace(word, "*" * len(word)) ?

Ответ №1:

Вы заменяете все экземпляры word , если найден только один, вы должны заменять его каждый раз вручную:

 def censor(text, word):
    text = text.lower()
    text_to_list = text.split()
    out = []
    for i in text_to_list:
        out.append('*' * len(word) if i == word else i)
    print(' '.join(out))
  

Комментарии:

1. Большое вам спасибо, Франциско. Можете ли вы немного подробнее объяснить, почему мой код был частично неправильным? Похоже, что когда я запускаю код, например. text=»this hack is wack hack», word =»hack», он отображает его правильно для этого экземпляра (this **** is wack ****).

2. Потому что "joey is a buggie bug".replace('bug', '***') == 'joey is a ***gie ***'

3. аааа, теперь я это вижу. Большое вам спасибо! 🙂

4. Если это решило проблему, пожалуйста, отметьте вопрос как ответ

Ответ №2:

вам не хватает сравнения, что до и после вашего «слова» нет символов, кроме пробелов