#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:
вам не хватает сравнения, что до и после вашего «слова» нет символов, кроме пробелов