Форум сайта python.su
Я крч пытался и сяк и так ничо не получаеться, вот задание:
На вход программе подается строка текста с именем текстового файла. Напишите программу, выводящую на экран содержимое этого файла, но с заменой всех запрещенных слов звездочками * (количество звездочек равно количеству букв в слове).
Запрещенные слова, разделенные символом пробела, хранятся в текстовом файле forbidden_words.txt. Гарантируется, что все слова в этом файле записаны в нижнем регистре.
Формат входных данных
На вход программе подается строка текста с именем существующего текстового файла, в котором необходимо заменить запрещенные слова звездочками.
Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.
Примечание 1. Ваша программа должна заменить запрещенные слова, где бы они ни встречались, даже если они встречаются в середине другого слова.
Примечание 2. Программа должна заменять запрещенные слова независимо от их регистра. Например, если файл forbidden_words.txt содержит запрещенное слово exam, то слова exam, Exam, ExaM, EXAM и подобные должны быть заменены на ****.
Примечание 3. Если бы файл forbidden_words.txt содержал слова:
hello email python the exam wor is
а файл в котором заменяются слова имел бы вид:
Hello, world! Python IS the programming language of thE future. My EMAIL is….
PYTHON is awesome!!!!
то результатом будет:
*****, ***ld! ****** ** *** programming language of *** future. My ***** **….
****** ** awesome!!!!
Офлайн
MeacronacerХотите получить решение – озвучивайте сумму вознаграждения.
Я крч пытался и сяк и так ничо не получаеться, вот задание:
Офлайн
MeacronacerА потом она будет портить слова “подстрахуйте” и “застрахуйте”. Встречал такое на форумах, сделанных пхпшниками. Они кроме простой замены делать ничего не умеют. И когда возникает такой баг, они его не могут исправить, так как там думать надо.
Примечание 1. Ваша программа должна заменить запрещенные слова, где бы они ни встречались, даже если они встречаются в середине другого слова.
Офлайн
doza_andНу я вроде написал код но сайт отказываеться принимать говорит что строка while i.lower() != j:
with open('forbidden_words.txt', 'r', encoding='UTF-8') as forb, open(input(), 'r', encoding='UTF-8') as trans: f = forb.read().split() d = trans.read().split() for i in d: z, k = 0, 0 for j in f: if j in i.lower(): while i[0].lower() != j[z]: z += 1 p = i[z:len(j)] k = 1 print(len(p) * '*' + i[len(p):] if k == 1 else i, end=' ')
Отредактировано Meacronacer (Авг. 24, 2021 02:13:06)
Офлайн
MeacronacerНу сайт запитывает ваш код множеством входов. Вы же не пробовали их все.
Ну я вроде написал код но сайт отказываеться принимать
i="путин" re.sub(i,"*"*len(i),"ПутИн ел морковку.\n путин хрустел.",flags=re.I|re.M) '***** ел морковку.\n ***** хрустел.'
Отредактировано doza_and (Авг. 24, 2021 08:02:03)
Офлайн
doza_andну я в принципе понял в чем была причина, если допустим запрещенное слова находиться в середине слова то оно выходит из ренжа, я не пользывался find потому-что не смог придумать как тут использывать find плюс писал код не на холодную голову, сейчас попробую написать другой код или переделать старый, как закончу скину надеюсь оценишь))
Отредактировано Meacronacer (Авг. 24, 2021 16:33:32)
Офлайн
Meacronacer
Я ы делал это регулярками. Там и замена есть и игнорирование регистра.
import re forbidden_words = 'hello email python the exam wor is'.split(' ') my_string = '''Hello, world! Python IS the programming language of thE future. My EMAIL is…. PYTHON is awesome!!!! ''' def change(forbidden_words,text): out = text for w in forbidden_words: out = re.sub(w,"*"*len(w),out,flags=re.I|re.M) return out print(change(forbidden_words,my_string))
*****, ***ld! ****** ** *** programming language of *** future. My ***** **…. ****** ** awesome!!!!
Офлайн
doza_andя крч переделал код щас из ренжа не выходит и работает нормально и может менять в середине слова или в конце. но появилась другая проблема))
d = trans.read().split()
['Hello,', 'world!', 'Python', 'IS', 'the', 'programming', 'language', 'of', 'thE', 'future.', 'My', 'EMAIL', 'is....', 'PYTHON', 'is', 'awesome!!!!']
['Hello,', 'world!', 'Python', 'IS', 'the', 'programming', 'language', 'of', 'thE', 'future.', 'My', 'EMAIL', 'is....\n', 'PYTHON', 'is', 'awesome!!!!]
with open('forbidden_words.txt', 'r', encoding='UTF-8') as forb, open(input(), 'r', encoding='UTF-8') as trans: d = trans.read().split() f = forb.read().split() for i in d: z = 0 for j in f: if j in i.lower(): while i[z].lower() != j[0]: z += 1 s = i[z:z+len(j)] i = i[:z] + '*' * len(s) + i[z+len(j):] print(i, end=' ')
Отредактировано Meacronacer (Авг. 24, 2021 17:49:07)
Офлайн
Meacronacer
и может менять в середине слов
doza_andПочему вы считаете что запрещенное слово внутри слова бывает только один раз? Это надо учесть. А как учтете то нужда в разбиении входа на слова вообще отпадет.
3. При такой постановке задачи вообще непонятно зачем вы разбиваете вход на слова.
Офлайн
#
Отредактировано Meacronacer (Авг. 25, 2021 16:55:36)
Офлайн