Найти - Пользователи
Полная версия: Запрещенные слова в файле
Начало » Python для новичков » Запрещенные слова в файле
1 2
Meacronacer
Я крч пытался и сяк и так ничо не получаеться, вот задание:

На вход программе подается строка текста с именем текстового файла. Напишите программу, выводящую на экран содержимое этого файла, но с заменой всех запрещенных слов звездочками * (количество звездочек равно количеству букв в слове).

Запрещенные слова, разделенные символом пробела, хранятся в текстовом файле 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!!!!
doza_and
Meacronacer
Я крч пытался и сяк и так ничо не получаеться, вот задание:
Хотите получить решение – озвучивайте сумму вознаграждения.
Хотите исправления ошибок в вашем коде - приводите код.
py.user.next
Meacronacer
Примечание 1. Ваша программа должна заменить запрещенные слова, где бы они ни встречались, даже если они встречаются в середине другого слова.
А потом она будет портить слова “подстрахуйте” и “застрахуйте”. Встречал такое на форумах, сделанных пхпшниками. Они кроме простой замены делать ничего не умеют. И когда возникает такой баг, они его не могут исправить, так как там думать надо.
Meacronacer
doza_and
Ну я вроде написал код но сайт отказываеться принимать говорит что строка while i.lower() != j:
IndexError: string index out of range. что типо выходил из ренжа но у меня в пайчарме вроде нормально работает вот код))

 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=' ')
doza_and
Meacronacer
Ну я вроде написал код но сайт отказываеться принимать
Ну сайт запитывает ваш код множеством входов. Вы же не пробовали их все.

Что будет если во в слове запрещенное слово встречается дважды?

Ну и по стилю.
1. Непонятно почему вы совсем не пользуетесь строковыми функциями find… Это сильно усложнило код.
2. Данные считали, заем после этого вы файлы открытыми держите, лишний отступ в коде, лишние ресурсы системы заняты
3. При такой постановке задачи вообще непонятно зачем вы разбиваете вход на слова.

Я ы делал это регулярками. Там и замена есть и игнорирование регистра.

 i="путин"
re.sub(i,"*"*len(i),"ПутИн ел морковку.\n  путин хрустел.",flags=re.I|re.M)
'***** ел морковку.\n  ***** хрустел.'

Meacronacer
doza_and
ну я в принципе понял в чем была причина, если допустим запрещенное слова находиться в середине слова то оно выходит из ренжа, я не пользывался find потому-что не смог придумать как тут использывать find плюс писал код не на холодную голову, сейчас попробую написать другой код или переделать старый, как закончу скину надеюсь оценишь))
P.s я просто не умею делать через регулярные, надо научиться)
xam1816
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!!!!
Meacronacer
doza_and
я крч переделал код щас из ренжа не выходит и работает нормально и может менять в середине слова или в конце. но появилась другая проблема))
крч когда я присваиваю переменной
 d = trans.read().split()
то у меня выходит список из
 ['Hello,', 'world!', 'Python', 'IS', 'the', 'programming', 'language', 'of', 'thE', 'future.', 'My', 'EMAIL', 'is....', 'PYTHON', 'is', 'awesome!!!!']
но проблема в том что у меня удаляються все знаки переноса строки тоесть \n как можно сделать точно такой список но чтоб не удалялись знаки переноса строки, Должен выйти вот такой вот список
 ['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=' ')
doza_and
Meacronacer
и может менять в середине слов
doza_and
3. При такой постановке задачи вообще непонятно зачем вы разбиваете вход на слова.
Почему вы считаете что запрещенное слово внутри слова бывает только один раз? Это надо учесть. А как учтете то нужда в разбиении входа на слова вообще отпадет.
Meacronacer
#
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB