Это происходит из-за изменения текста с помощьюно если в вашем коде слово окажется частью слова, то все равно результат будет странный
replace. def func1(s):
    r = {
        'то': '12',
        'текст': 'документ'
    }
    return r[s]
def func2(s):
    return ''
def func3(s):
    return s.upper()
# словарь со словами для обработки и функциями-обработчиками
dict_ = {
    'то': func1,
    'какой-то': func2,
    'большой': func3,
    'текст': func1
}
text = 'это какой-то большой текст то'
# список для преобразованных слов
text2 = []
# делим текст на слова по пробелам и проходим по ним в цикле
for s in text.split():
    # если слово есть в словаре dict_ то
    # добавляем в список text2 результат функции-обработчика
    # если слова нет в словаре
    # добавляем его в список text2 без изменений
    text2.append(dict_[s](s) if dict_.get(s) else s)
# собираем текст из списка слов после обработки
text = ' '.join([s for s in text2 if s])
print(text)count возвращает количество повторений подстроки в строке, если подстрока не найдена, возвращает 0find() и count() скажите какая в них разница? спасибо
А проще так:Python:s = "Есть строка" if s.find("строка") != -1: s = s.replace("строка", "новая строка") print(s)
s = "Есть строка"
s = s.replace("строка", "новая строка")
print(s)у ТСа в задании найти и заменить...А проще так:
Код:s = "Есть строка" s = s.replace("строка", "новая строка") print(s)
(если строки нет, он все равно ее не заменит)
replace ведь это и делает, находит и заменяет...у ТСа в задании найти и заменить...
Видимо я не точно сформулировал вопрос. Необходимо при переборе текста и обнаружении определенного слова запустить определенную функцию работающую с этим словом в зависимости от условий. Спасибо.Python:s = "Есть строка" if s.find("строка") != -1: s = s.replace("строка", "новая строка") print(s)
все равно ничего не понятно...Видимо я не точно сформулировал вопрос. Необходимо при переборе текста и обнаружении определенного слова запустить определенную функцию работающую с этим словом в зависимости от условий. Спасибо.
Перебирается текст Если находится слово №1 запускается функция замены его на другое слово, если обнаруживается слово №2 оно просто удаляется. Если обнаруживается слово №3 оно пишется заглавными буквами.все равно ничего не понятно...
def func1(t):
    return ' :-) '
def func2(t):
    return str(t * 2)
di = {
        func1 : ['это', 'то'],
        func2 : ['как'],
        (lambda x: x.upper()) : ['текст']
         }
text = 'это какой-то текст'
for f in di:
    for v in di[f]:
        text = text.replace(v, '1')
print(text)Спасибо Но это не совсем то что нужно. Нужно чтобы это заменялось на то, вместо как было каккак а слово текст писалось заглавными. Здесь же как я понимаю, функции func1(t): и func2(t): только обозначаются но не вызываются. А мне нужно чтобы вызывалась функция при обнаружении слова в тексте.Python:def func1(t): return ' :-) ' def func2(t): return str(t * 2) di = { func1 : ['это', 'то'], func2 : ['как'], (lambda x: x.upper()) : ['текст'] } text = 'это какой-то текст' for f in di: for v in di[f]: text = text.replace(v, '1') print(text)
Вот пример:Перебирается текст Если находится слово №1 запускается функция замены его на другое слово, если обнаруживается слово №2 оно просто удаляется. Если обнаруживается слово №3 оно пишется заглавными буквами.
def func1(s):
    r = {
        'это': 'то',
        'текст': 'документ'
    }
    return r[s]
def func2(s):
    return ''
def func3(s):
    return s.upper()
# словарь со словами для обработки и функциями-обработчиками
dict_ = {
    'это': lambda x: func1(x),
    'какой-то': lambda x: func2(x),
    'большой': lambda x: func3(x),
    'текст': lambda x: func1(x)
}
text = 'это какой-то большой текст'
# делим текст на слова по пробелам и проходим по ним в цикле
for s in text.split():
    # если слово есть в словаре, то вызывается соответствующая функция
    if s in dict_:
        # замена слова в тексте на результат вызова функции
        text = text.replace(s, dict_[s](s), 1)
text = text.replace('  ', ' ')  # убираем лишние пробелы из текста
print(text)А, мда, после отладки не изменил самое важное:Спасибо Но это не совсем то что нужно. Нужно чтобы это заменялось на то, вместо как было каккак а слово текст писалось заглавными. Здесь же как я понимаю, функции func1(t): и func2(t): только обозначаются но не вызываются. А мне нужно чтобы вызывалась функция при обнаружении слова в тексте.
def func1(t):
    return ' :-) '
def func2(t):
    return str(t * 2)
di = {
        func1 : ['это', 'то'],
        func2 : ['как'],
        (lambda x: x.upper()) : ['текст']
         }
text = 'это какой-то текст'
for f in di:  # Проходимся по всем функциям словаря
    for v in di[f]:  # Смотрим к каким словам надо применить указанную функцию
        text = text.replace(v, f(v))  # Забыл тут поменять на что менять
print(text)А почему словарь не такой?Вот пример:
Python:def func1(s): r = { 'это': 'то', 'текст': 'документ' } return r[s] def func2(s): return '' def func3(s): return s.upper() # словарь со словами для обработки и функциями-обработчиками dict_ = { 'это': lambda x: func1(x), 'какой-то': lambda x: func2(x), 'большой': lambda x: func3(x), 'текст': lambda x: func1(x) } text = 'это какой-то большой текст' # делим текст на слова по пробелам и проходим по ним в цикле for s in text.split(): # если слово есть в словаре, то вызывается соответствующая функция if s in dict_: # замена слова в тексте на результат вызова функции text = text.replace(s, dict_[s](s), 1) text = text.replace(' ', ' ') # убираем лишние пробелы из текста print(text)
dict_ = {
    'это': func1,
    'какой-то': func2,
    'большой': func3,
    'текст': func1
}Просто сначала сделал на лямбдах, потом добавил функции чтобы было понятней, а лямбды не убрал. Вариант с функциями смотрится лучше.А почему словарь не такой?
di = {
    func1 : ['это', 'то'],
    func2 : ['как'],
    str.upper : ['текст']
}Слова в ключах для наглядности чтобы показать что для обработки конкретного слова можно привязать функцию. Также мой код меняет конкретное слово в тексте на другое (которое указано для замены), а не все вхождения этого слова (возможно не нужно менять вхождение слова если оно является частью другого слова).И просто ради уточнения, я писал у себя функции в ключи словаря, чтобы если будет 10 слов к которым надо применить функцию, не создавать 10 элементов словаря, а просто указать функцию как ключ и список слов как значение
Изменил наПросто сначала сделал на лямбдах, потом добавил функции чтобы было понятней, а лямбды не убрал. Вариант с функциями смотрится лучше.
У вас в коде тоже лямбду можно заменить на функцию:
Python:di = { func1 : ['это', 'то'], func2 : ['как'], str.upper : ['текст'] }
Слова в ключах для наглядности чтобы показать что для обработки конкретного слова можно привязать функцию. Также мой код меняет конкретное слово в тексте на другое (которое указано для замены), а не все вхождения этого слова (возможно не нужно менять вхождение слова если оно является частью другого слова).
def func1(t):
    return 'ток'
def func2(t):
    return str(t * 2)
def func3(t):
    return str.upper
di = {
    func1 : ['это', 'то'],
    func2 : ['как'],
    func3 : ['текст']
}
text = 'это какой-то текст'
for f in di:  # Проходимся по всем функциям словаря
    for v in di[f]:  # Смотрим к каким словам надо применить указанную функцию
        text = text.replace(v, f(v))  # Забыл тут поменять на что менять
print(text)