Это происходит из-за изменения текста с помощьюно если в вашем коде слово окажется частью слова, то все равно результат будет странный
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)